NGinx 和 PHP-FPM 在不同服务器上的文件问题

NGinx 和 PHP-FPM 在不同服务器上的文件问题

我对在单独的服务器上使用 FastCGI 运行 NGinx 和 PHP 进行了一些研究,并已在测试虚拟机上成功设置。我遇到了这些文章描述的问题...

...也就是说,为了使此设置正常工作,PHP 文件需要位于两个服务器上的同一目录中,即使运行 php-fpm 工作程序的机器实际上正在执行脚本。我自己已经测试过了;如果我在 NGinx 服务器上的文档根目录中删除文件“test.php”,它会抛出 404 或 403,即使该文件仍存在于 PHP-FPM 机器上。

我的问题是:没有办法解决这个问题吗?我知道使用运行 NFS 的中央存储是一种解决方案,但我想避免与此相关的性能问题。

如果有帮助的话,这里是我的配置文件:

/etc/nginx/sites-enabled/test-app.conf

upstream test-app {
    server <php-fpm-server-ip>:9001;
}

server {
    listen 80;
    listen [::]:80;

    server_name test.app.com;
    root /var/www/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
        try_files $uri $uri/ =404;
        fastcgi_pass test-app;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

答案1

如果您确实想这样做,请从 \.php 位置下的 nginx 中删除它:

try_files $uri $uri/ =404;

这就是导致它在将请求传递给 fcgi 上游之前检查文件系统的原因。另外,验证 fcgi 进程是否正确设置了根目录,这样它就无法读取随机的 php 文件,因为 nginx 无法进行存在性检查。

答案2

php 文件需要同时存在于“nginx 服务器”和“php-fpm”服务器上,否则,nginx 将返回 404 页面未找到

您需要同步本地 nginx 服务器(文件必须存在但内容可以为 0 字节)和后端 php 服务器(实际的 php 脚本)的所有文件

或者,您可以使用 SSHFS 在服务器之间共享文件,NFS 是另一种方式。您将 php 脚本放在本地文件夹(php-fpm 服务器)中,然后将此文件夹挂载到 nginx 服务器。在 nginx.conf 中,将文档根目录指向已挂载的文件夹就这样,无需同步文件

相关内容