大佬教程收集整理的这篇文章主要介绍了nginx try_files处理两次,如果设置了错误回退,则会失败,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个位置块设置来捕获所有文件请求并将它们发送到php-FPM:
LOCATIOn / {
try_files $uri /routIng.php?$args;
fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock;
include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf;
}
这可以正确地将请求传递给php-FPM到请求的确切的现有php文件或者将routIng.php设置为要运行的脚本.
我试图添加一个错误页面,这样如果路由文件被删除或者不可用,将显示错误页面而不是Nginx的默认错误页面:
LOCATIOn / {
try_files $uri /routIng.php?$args /50x_static.html;
fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock;
include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf;
}
这会停止提供routIng.php文件,而是显示50x_static.html页面.对现有php文件的请求仍然有效,即转到URL /dynamic.php
我意识到try_files命令中的最后一个参数有点神奇:
在调查error_page破坏配置的原因时,我意识到对于有效的配置(没有静态错误页面),在尝试获取根URL时,Nginx似乎确实根据Nginx重写日志匹配请求两次“/ “:
"^/proxy/(\d+)/(\w+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/",client: 127.0.0.1,server: basereality.com,request: "GET / http/1.1",host: "basereality.test"
"^/proxy/(\d+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/",host: "basereality.test"
"^/staticImage/(\w+)/(.+)\.([^\.]*)$" does not match "/",host: "basereality.test"
"^/proxy/(\d+)/(\w+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/routIng.php",host: "basereality.test"
"^/proxy/(\d+)/(.+)\.(gif|png|jpg|jpeg|GIF|PNG|JPG|JPEG)$" does not match "/routIng.php",host: "basereality.test"
"^/staticImage/(\w+)/(.+)\.([^\.]*)$" does not match "/routIng.php",host: "basereality.test"
即,请求以/作为/,try_files无法提供文件,因此从/向/routIng.php重写请求,然后重新处理请求.
为什么尝试文件在第一次传递时不提供routIng.php文件?它存在且可访问,否则将不会在第二轮提供.
编辑
删除了不相关的配置.
@H_696_37@
至于你的规则,你是否尝试在try_files中省略$args?
LOCATIOn / {
try_files $uri /routIng.php /50x_static.html;
fastcgi_pass unix:/opt/local/var/run/php54/php-fpm-www.sock;
include /documents/projects/intahwebz/intahwebz/conf/fastcgi.conf;
}
请注意,$uri也不包含$args;查询参数仍将通过QUERY_StriNG参数传递给FastCGI后端,该参数可能在fastcgi.conf中设置:
fastcgi_param QUERY_StriNG $query_String;
如果$uri和/routIng.php都不作为文件存在,请求将被重定向到/50x_static.html并根据您的配置中的LOCATIOn = /50x_static.html部分进行处理(但是重写尝试的第二次迭代仍然会执行,因为您的重写规则放在服务器级别).
您的配置的一个非常可疑的细节是您通过php传递所有文件而不管文件扩展名 – 这是非常不寻常的,并且可能由于php代码在不期望的文件中执行而导致安全问题.
@H_696_37@以上是大佬教程为你收集整理的nginx try_files处理两次,如果设置了错误回退,则会失败全部内容,希望文章能够帮你解决nginx try_files处理两次,如果设置了错误回退,则会失败所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。