Nginx 负载平衡与代理 php-fpm - try_files

Nginx load balance with proxied php-fpm - try_files

我正在尝试设置多个 php-fpm 服务器来处理流量高峰。

现在我有一台机器 运行ning Nginx + PHP7.3-fpm + Redis (6vCPU and 16GB RAM) 和另一台分开的机器 运行ning only php-fpm 7.3 和相同的扩展。

一切正常,但我必须制定应对流量高峰的计划。而且我不知道如何连接这台新的和孤立的机器与主服务器一起工作而不会有很多麻烦。

我已经对此进行了很多研究,但没有发现任何具体的内容。

我能找到的最有价值的 link 是:

https://serverfault.com/questions/744124/file-issue-with-nginx-php-fpm-on-separate-servers

nginx - php-fpm cluster

https://blog.digitalocean.com/horizontally-scaling-php-applications/

Nginx to serve php files from a different server

我阅读了几个关于它的文档,但主要的疑问仍然存在:

我可以简单地从所有 nginx 位置 conf 中删除 try_files 行并在 php.ini 中设置 cgi.fix_pathinfo =0 这样我就不必在所有服务器上都有文件了吗?

或者为了安全起见最好挂载一个 NFS 文件系统,让每个 .php 文件在所有服务器中,包括 php-fpm 专用服务器?

有些人说 "create a NFS and mount to all php-fpm proxied servers or use rsync to sync files through servers",有些人说 "remove try_files and it will work",但我确实找到了一篇说 "remove try_files and cross your fingers to not be hacked" 的文章。 :O

执行此操作的 better/correct/most 安全方法是什么?现在我们还能被黑客删除 try_files 吗?

如果我可以简单地删除 try_files,不同位置的不同软件是否可以正常工作? 假设我在根文件夹上安装了一个 WP,在 /forum/ 文件夹上安装了一个 Xenforo。 try_files彼此不同

服务器之前的上游块{}

        upstream backend {
            server unix:/var/run/php/php7.3-fpm.sock weight=100 max_fails=5 fail_timeout=5;
            server unix:/var/run/php/php7.3-fpm-2.sock weight=100 max_fails=5 fail_timeout=5;
            #I want to add 192.168.x.x:9000 here to balance with this origin server
        }

服务器块示例:

        location / {
                try_files $uri $uri/ /index.php;
        }

        #AMP
        location /amp/ {
                try_files $uri $uri/ /amp/index.php;
        }

        #forum
        location /forum/ {
                try_files $uri $uri/ /forum/index.php?$uri&$args;
                index index.php index.html;
        }

        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            #fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
            fastcgi_pass backend;
        }

我也将 php-fpm 服务器绑定到 运行 的内部 IP(不是 127.0.0.1)并在 [=63= 中的 listen.allowed_clients 上设置 accpet nginx 代理 ip ]

还在 php-fpm-server-IP:9000 上从原始服务器执行了 nmap 运行,它说它正在 运行ning 及以上。

如果您知道如何操作或者可能有人 link 展示了如何操作,请分享。 我有待命的机器,等待一起工作,请帮助实现这个目标。

因为我没有任何帮助的答案,所以我最终从源服务器到 PHP 服务器执行了一个 NFS 来获取文件,从而保留了 try_files。我不想在不知道安全后果的情况下冒险删除 try_files。

所以现在对我来说正确的答案是做一个 NFS 并将 NGINX 请求传递给 PHP-FPM 缩放机器。一切顺利,没有出现大问题。唯一的问题是更改 php-fpm.conf 中的内部 IP,将内部 IP 包含在 NFS 服务器中,并将新的内部 IP 包含在 NGINX 上游池中。当然,从文件中删除 php 会话到 Redis。这样,当将请求从原始服务器更改为缩放服务器时,登录页面不会注销。