1
votes

I need to configure nginx for different location on same domain for two php frameworks. example.com/ - codeigniter (root /var/www/html/codeigniter)

example.com/api - laravel 5.2 (root /var/www/html/laravel)

here my examples, but they not work.

server {

    listen 80;
    server_name example.com www.example.com;
    root /var/www/html/codeigniter;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php;
    }   

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
    }


    location /api {
        root /var/www/html/laravel/public/;
        index index.php index.html index.htm;

        try_files $uri $uri/ index.php?$query_string;

        location ~ \.php$ {
            try_files $uri /index.php =500;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors off; 
            fastcgi_buffer_size 16k; 
            fastcgi_buffers 4 16k;                       
        }


    }    
}   

In first example perfectly works codeinginter on routes example.com/*, but laravel not work on route:

 /api - codeigniter return 404 page not found,
 /api/index.php - laravel return 404 because this page not exists,
 /api/user/ -codeigniter also return 404 page

this config also not works:

server {
        listen 80;

        server_name example.com;

        root /var/www/;

        index index.php index.html index.htm;

        charset utf-8;

        access_log /var/log/nginx/example.com-access.log;
        error_log  /var/log/nginx/examplw.com-error.log error;

        sendfile off;

        client_max_body_size 100m;



        location /api {
                root /var/www/html/laravel/public;
                index index.php index.html index.htm;

                try_files $uri $uri/ /index.php?$query_string;

                location ~ \.php$ {
                        try_files $uri /index.php =500;
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index index.php;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_intercept_errors off;
                        fastcgi_buffer_size 16k;
                        fastcgi_buffers 4 16k;
                }

                location ~ /\.ht {
                        deny all;
                }
        }

        location / {
                root /var/www/html/codeigniter;
                index index.php index.html index.htm;

                try_files $uri $uri/ /index.php?$query_string;

                location ~ \.php$ {
                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                        fastcgi_index index.php;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        fastcgi_intercept_errors off;
                        fastcgi_buffer_size 16k;
                        fastcgi_buffers 4 16k;
                }

                location ~ /\.ht {
                        deny all;
                }
        }


}

this configuration also not work example.com - codeigniter works perfectly, example.com/api - codeigniter return 404 example.com/api/index.php - laravel return 404

Can anyone help me find the right way to configure this?

1

1 Answers

0
votes

Check this out:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/;
    index index.php index.html index.htm;

    server_name example.com; 

    # CodeIgniter
    location / {
            try_files $uri $uri/ /index.php?$uri&$args;
    }

    # deny access to .htaccess files
    location ~ /\.ht {
            deny all;
    }

    # Laravel
    location /api {                                                                                                                                                 
                try_files $uri $uri/ /api/index.php?$query_string;                                                                                                       
        }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

}    

Place your Laravel index file (index.php) inside the directory /public/api

Change the the directories in index.php to call the correct bootstrap file

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <[email protected]>
 */

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels nice to relax.
|
*/

require __DIR__.'/../../bootstrap/autoload.php';

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

$app = require_once __DIR__.'/../../bootstrap/app.php';