如何在Nginx,FastCGI中的两个目录中配置两个Codeigniter应用程序

时间:2017-11-01 07:25:34

标签: php codeigniter nginx

我有一个特定的要求,即在指向domain.com/domain.com/site2的同一个Nginx服务器中设置两个基于CodeIgniter的应用程序。

到目前为止,我已经尝试了各种配置组合而没有任何运气。大部分时间它都给我404错误。

以下是我最新的配置文件。

server {
        listen       80;
        server_name  domain.com www.domain.com;
        root   /var/www/domain.com/;

        location / {
            root   /var/www/domain.com/site1/public/;
            index index.html index.php
            access_log /var/www/domain.com/site1/logs/access.log;
            error_log /var/www/domain.com/site1/logs/errors.log;
            location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME /var/www/domain.com/main/public$fastcgi_script_name;
                fastcgi_param PATH_INFO       $fastcgi_path_info;
            }
        }

        location /site2{
            root /var/www/domain.com/site2/public/;
            index index.html index.php;
            access_log /var/www/domain.com/site2/logs/access.log;
            error_log /var/www/domain.com/site2/logs/errors.log;
            location ~ \.php$ {
                include fastcgi_params;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME
                $document_root$fastcgi_script_name;
            }
        }
    }

我使用alias代替root而没有域名部分。仍然没有运气。

但是当我在位置块中使用aliastry_files $uri $uri/ /site2/site2/public/index.php?$query_string时,它会加载没有像css / js这样的资源的网站。

请告诉我配置有什么问题。

1 个答案:

答案 0 :(得分:1)

aliasfastcgi一起使用,要求您使用$request_filename来计算SCRIPT_FILENAME的正确值。

location值和alias值应以/结尾,或以/结尾,以实现正确的替换。

location /site2 {
    alias /var/www/domain.com/site2/public;
    index index.html index.php;
    access_log /var/www/domain.com/site2/logs/access.log;
    error_log /var/www/domain.com/site2/logs/errors.log;

    if (!-e $request_filename) { rewrite ^ /site2/index.php last; }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        include fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $request_filename;
    }
}

使用第一个if块来模拟问题中的try_files语句。由于this issue,请避免使用aliastry_file

使用第二个if块来避免passing uncontrolled requests to PHP

有关使用if的信息,请参阅this caution