【问题标题】:Identical files issue with Nginx and FastCG on separate serversNginx 和 FastCG 在不同服务器上的相同文件问题
【发布时间】:2015-12-12 17:30:10
【问题描述】:

在将 NGINX Plus 与 FastCGi (PHP-FPM) 一起使用时,问题是我们需要在 Nginx Plus 和 FastCGI 服务器上拥有相同的文件集。

这是我的示例配置:-

机器 1:Nginx Plus 机器 2:FastCGI(PHP-FPM)

我的 Nginx 配置:

server {
    listen   80;
    server_name  kp.in;
    root /var/example/;

location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass   172.16.38.179:9000;
        fastcgi_index  index.php;
        ........ 
        ........
 }

我在 NGINX 和 FastCGI 服务器的 /var/example/ (文档根目录)中有一个简单的“hello.php”文件。如果我从 NGINX 文档根目录中删除 hello.php,那么在浏览器中,Nginx 会显示 404 Not found。

有什么解决方法吗?理想情况下,我想将所有 PHP 文件保存到 FastCGi ( PHP-FPM ) 服务器本身,而不是将其保存在多个服务器中。

【问题讨论】:

    标签: php nginx fastcgi


    【解决方案1】:

    nginx 和php-fpm 的常见实现将这两个服务放在同一文件系统内的同一服务器上。避免passing uncontrolled requests to PHP 的常用技术是在PHP 位置块中添加try_files 指令。

    try_files 的目的是在将文件名传递给本地 PHP 解释器之前确保文件存在于本地文件系统中。

    如果解释器不是本地的,则应采用其他技术来避免向上游发送格式错误的文件名,例如fastcgi_split_path_info。

    在您的特定情况下,\.php$ 正则表达式不接受 pathinfo,因此不易受到 pathinfo 漏洞的影响。只需从 location ~ \.php$ 容器中删除 try_files $uri =404; 行。 您也可能会丢失fastcgi_index,因为容器也看不到裸目录。

    location ~ \.php$ {
        fastcgi_pass  172.16.38.179:9000;
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-02
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      相关资源
      最近更新 更多