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

相关文章

蚂蚁庄园小课堂2024年6月29日答案是什么?进入支付宝一起饲养...
谷歌小恐龙怎么调出来,我们将连接电脑的网络拔掉或者禁用网...
蚂蚁庄园小课堂2024年6月22日答案是什么?每天蚂蚁庄园小课堂...
火绒为什么不建议大家用,火绒对于用户的要求比较高,查杀病...
百度网盘电脑版订阅的分享在哪?百度网盘电脑版订阅的分享在什...
notepad怎么替换换行符,打开notepad++软件,点击菜单栏的视...