在不同的服务器上,Nginx和FastCG会发出相同的文件

时间:2015-12-11 23:17:10

标签: php nginx fastcgi

使用带有FastCGi(PHP-FPM)的NGINX Plus时,问题是我们需要在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 Server中的/ var / example /(Document Root)中都有一个简单的“hello.php”文件。如果我从NGINX Document Root中删除hello.php,那么在浏览器中,Nginx说404找不到。

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

1 个答案:

答案 0 :(得分:0)

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

try_files的目的是确保文件存在于本地文件系统中,然后将其名称传递给本地PHP解释器。

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

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

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