使用带有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)服务器本身,而不是将其保存在多个服务器中。
答案 0 :(得分:0)
nginx
和php-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;
...
}