微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nginx php403错误如何解决

今天小编给大家分享一下Nginx PHP403错误如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Nginx PHP403错误解决办法:1、修改文件权限或开启selinux;2、修改PHP-fpm.conf,加入需要的文件扩展名;3、修改PHP.ini内容为“cgi.fix_pathinfo = 0”;4、重启PHP-fpm即可。

Nginx + PHP 403 原因分析

问题:

配置的网站,访问出现报错:Access Denied (403)

常见解决方法:

1、文件权限问题

可能是文件权限问题,没有读权限。

或者selinux没有关闭

2、security.limit_extensions

查看Nginx错误日志error.log,发现有如下错误

2016/07/07 10:20:13 [error] 17710#0: *2145 FastCGI sent in stderr: "Access to the script '/home/www/game/10313156.html' has been denied (see security.limi
t_extensions)" while reading response header from......

从5.3.9开始,PHP官方加入了一个配置"security.limit_extensions",认只允许执行扩展名为".PHP"的文件,造成了其他类型的文件不支持的问题。

官方说明 :

; Limits the extensions of the main script FPM will allow to parse. This can
; prevent configuration mistakes on the web server side. You should only limit
; FPM to .PHP extensions to prevent malicIoUs users to use other extensions to
; exectute PHP code.
; Note: set an empty value to allow all extensions.
; Default Value: .PHP
;security.limit_extensions = .PHP .PHP3 .PHP4 .PHP5

修改PHP-fpm.conf:(加入需要的文件扩展名)

security.limit_extensions = .PHP .html .js .css .jpg .jpeg .gif .png .htm

3、cgi.fix_pathinfo

通过这种url访问,显示Acess denied 错误

Nginx错误日志:

2016/07/08 09:47:12 [error] 24297#0: *3348 FastCGI sent in stderr: "Access to the script '/home/www/home.PHP/game/qr' has been denied (see security.limit_extensions)" while reading response header......

修改PHP.ini :(cgi.fix_pathinfo 认为1 )

cgi.fix_pathinfo = 1

官方说明 :

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; prevIoUs behavIoUr was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://PHP.net/cgi.fix-pathinfo

其实cgi.fix_pathinfo = 1 会引发文件类型错误解析漏洞,建议是设置 cgi.fix_pathinfo = 0 。

( 关于漏洞的理解:

  当cgi.fix_pathinfo=1时,访问路径:/foo.jpg/file.PHP ,如果file.PHP文件不存在,则PHP解析器会试图猜测你要执行哪个文件,沿着路径往回找。如果foo.jpg存在, 并且包含PHP代码PHP解析器就会去执行foo.jpg 。

  当cgi.fix_pathinfo=0时,PHP 解释器仅尝试给出的路径,如果文件没有找到就停止处理。

)

但将 cgi.fix_pathinfo = 0 ,可能会导致很多MVC框架(如ThinkPHP)无法正常运行。

4、

PHP.ini上设置了:open_basedir=/home:/tmp/:/proc/

重启PHP-fpm

访问网页,按ctrl + F5频繁刷新的时候,会报 Access Denied错误。Access Denied是偶尔才会出现,不是一直403 。

Nginx错误日志记录:

2016/07/09 08:32:40 [error] 26954#0: *2127721 FastCGI sent in stderr: "PHP message: PHP Warning:  UnkNown: open_basedir restriction in effect. File(/home/www/touch/web/index.PHP) is not within the allowed path(s): (/home/wwwroot:/tmp/:/proc/) in UnkNown on line 0
PHP message: PHP Warning:  UnkNown: Failed to open stream: Operation not permitted in UnkNown on line 0
Unable to open primary script: /home/www/touch/web/index.PHP (Permission denied)" while reading response header from upstream, client: 117.136.1.22, server: test.hjq.com, request: "GET /index.PHP?c=Zs&a=getcontent HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "test.hjq.com"
2、In your Nginx config file set fastcgi_pass to your socket address (e.g. unix:/var/run/PHP-fpm/PHP-fpm.sock;) instead of your server address and port.
3、Check your SCRIPT_FILENAME fastcgi param and set it according to the location of your files.
4、In your Nginx config file include fastcgi_split_path_info ^(.+\.PHP)(/.+)$; in the location block where all the other fastcgi params are defined.

PHP有什么用

PHP一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及PHP自创新的语法,主要用来做网站开发,许多小型网站都用PHP开发,因为PHP是开源的,从而使得PHP经久不衰。

以上就是“Nginx PHP403错误如何解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程之家行业资讯频道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐