簡體   English   中英

如何在同一域上配置NGINX for codeigniter和laravel

[英]How to configure NGINX for codeigniter and laravel on same domain

我需要為兩個php框架在同一個域的不同位置配置nginx。 example.com/ - codeigniter(root / var / www / html / codeigniter)

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

這里是我的例子,但它們不起作用。

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;                       
        }


    }    
}   

在第一個例子中,完美地在路線example.com/*上工作代碼,但是laravel在路由上不起作用:

 /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

此配置也不起作用:

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;
                }
        }


}

此配置也不起作用example.com - codeigniter工作正常,example.com/api - codeigniter返回404 example.com/api/index.php - laravel返回404

任何人都可以幫我找到正確的配置方法嗎?

看一下這個:

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;
    }

}    

將Laravel索引文件( index.php )放在目錄/public/api

更改index.php的目錄以調用正確的bootstrap文件

<?php

/**
 * Laravel - A PHP Framework For Web Artisans
 *
 * @package  Laravel
 * @author   Taylor Otwell <taylorotwell@gmail.com>
 */

/*
|--------------------------------------------------------------------------
| 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';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM