>  기사  >  백엔드 개발  >  nginx php403 오류를 해결하는 방법

nginx php403 오류를 해결하는 방법

藏色散人
藏色散人원래의
2022-11-23 09:59:142510검색

nginx php403 오류 해결 방법: 1. 파일 권한을 수정하거나 selinux를 활성화합니다. 2. php-fpm.conf를 수정하고 필요한 파일 확장자를 추가합니다. 3. php.ini의 내용을 "cgi.fix_pathinfo = 0"으로 수정합니다. .php-fpm을 다시 시작하세요.

nginx php403 오류를 해결하는 방법

이 튜토리얼의 운영 환경: linux5.9.8 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

nginx php403 오류 해결 방법은 무엇입니까?

nginx + php 403 원인 분석

문제:

구성된 웹사이트, 액세스 오류: 액세스 거부(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을 통해 액세스하면 액세스 거부 오류가 표시됩니다.

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를 눌러 자주 새로고침하면 액세스 거부 오류를 보고합니다. 액세스 거부는 가끔 나타나는 것이지 항상 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 비디오 튜토리얼

"

위 내용은 nginx php403 오류를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.