Nginx + PHP-FPM URI 别名和多个 php 目录

Nginx + PHP-FPM URI 别名和多个 php 目录

我正在尝试配置 Nginx 以在同一域中的两个不同目录中托管多个基于 PHP 的应用程序。我试图获得的结果是:

http://webserver.local/ > 应用程序来自/path/to/website

http://webserver.local/app > 应用程序来自/path/to/php-app

这是我的配置。

有人能帮我解释一下我错在哪里吗?谢谢 :)

server {
    listen       80;
    server_name  webserver.local;

    location / {
        root   /path/to/website;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/website;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

    location ^~ /app {
        alias   /path/to/php-app;
        index  index.php;

        location ~ \.php$ {
            root           /path/to/php-app;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

答案1

嵌套location ~ \.php$块将找不到 PHP 脚本。$document_root设置为/path/to/php-app。与仍包含前缀$fastcgi_script_name的相同。$uri/app

正确的做法是使用$request_filename并删除你的虚假root声明:

location ^~ /app {
    alias   /path/to/php-app;
    index  index.php;

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $request_filename;
    }
}

fastcgi_params始终在任何语句之前包含,fastcgi_param以避免它们被包含文件的内容悄悄覆盖。请参阅这个文件了解详情。

相关内容