正确修改 cgi.fix_pathinfo 与 Nginx 的配置

11月17日 · 2017年
PD14 AD

之前博主在复活 YephyBlog 网站的时候,因为使用了 yeho 的 OneinStack 环境和 Typecho 程序,环境部署后却出现了 Access denied. 和 No input files. 这样的错误,博主当时很无语,临时找了办法解决掉了,但是今天发现这个办法是不对的,具体什么情况,我们下面慢慢说来:

因为当时急着复活网站,出现 Access denied. 和 No input files. 提示的时候,博主通过百度找到了一个比较迅速的解决办法,那就是直接修改了 PHP.ini 配置中的 cgi.fix_pathinfo 参数,把 cgi.fix_pathinfo=0 改成了 cgi.fix_pathinfo=1 ,这样的确解决了访问的问题(参考这里),而且博主还拿这个帮很多朋友解决了同样的问题。

但是……

今天,在 yeho 大神的群里,有人出现了同样的问题,只不过他使用的是 showdoc 这个程序,我当时就告诉他了这个办法,结果被 yeho 大神吐槽说,不能开启 cgi.fix_pathinfo ,说是开了很危险!于是赶紧去找相关资料科普,在 PHP.ini 配置文件中,有给出相关的配置介绍连接:http://php.net/cgi.fix-pathinfo ,打开访问后发现,驴唇不对马嘴,根本找不到,于是度娘搜索,结果发现了一大堆关于它的漏洞信息,果断去后台改了 PHP.ini 配置,又改成了 cgi.fix_pathinfo=0 。

改完之后,悲剧了,网站再次出现了 Access denied. 和 No input files. 这样的错误,于是继续找解决的办法,终于,在 40huo's 的网站,找到了解决的办法(参考这里),那就是直接将 Nginx 的 PHP 段改成如下形式:

location ~ [^/]\.php(/|$) {
  #fastcgi_pass remote_php_ip:9000;
  fastcgi_split_path_info ^(.+?.php)(/.*)$;
  fastcgi_pass unix:/dev/shm/php-cgi.sock;
  fastcgi_index index.php;
  include fastcgi.conf;
}

添加 fastcgi_split_path_info ^(.+?.php)(/.*)$; 后即可由 Nginx 设置 PATH_INFO 值,至此,终于解决了不改 PHP.ini 的方法。

0 条回应
验证码
输入运算符及数字使等式成立
{{comment.validate_num1}} = {{comment.validate_num2}}
点赞 确定
退出登录?
取消 确定