Nginx、PHP-FPM,子目录中有 2 个应用程序

Nginx、PHP-FPM,子目录中有 2 个应用程序

我在两个不同的文件夹中有 2 个应用程序。我希望将根文件夹用于所有内容,但当 URL 中有 /SOMENAME 作为文件夹时除外,在这种情况下我希望指向该文件夹。

我尝试了几个位置/别名块,但都没有起作用(位置正确,但 php 文件没有提供静态内容)...请参阅下面的配置。

server {
    listen 80;
    #disable_symlinks off;
    server_name join.mydomain.com; #allow few domains
    root /www/main;

    #removing the 'index.php'
    location / {
            if (!-e $request_filename){
                rewrite ^(.*)$ /index.php;
            }
            index index.html index.php;
    }

    location /SOMENAME/ {
            root /www/somename;
    }

    #######################
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass        unix:/var/run/php5-fpm.sock;
        include             fastcgi_params;
        fastcgi_param       PATH_INFO $fastcgi_script_name;
        fastcgi_param HTTPS on;
        fastcgi_index       index.php;
        fastcgi_param       SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

答案1

您有两个 PHP 应用程序,托管在不同的文档根目录中,这意味着您需要两个location ~ \.php$块。假设SOMENAMEsomename实际上相同,您可以使用如下方法:

root /www/main;
index index.html index.php;

location / {
    try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/var/run/php5-fpm.sock;
    include       fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;
}

location ^~ /somename {
    root /www;
    try_files $uri $uri/ /somename/index.php;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
        include       fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}

^~指令上的修饰符使location此前缀位置优先于其上方的正则表达式位置块,以便 PHP 脚本由正确的位置块处理。请参阅这个文件了解详情。

try_files指令是记录在这里

相关内容