Heim  >  Artikel  >  Backend-Entwicklung  >  So beheben Sie den Nginx PHP403-Fehler

So beheben Sie den Nginx PHP403-Fehler

藏色散人
藏色散人Original
2022-11-23 09:59:142511Durchsuche

nginx php403-Fehlerlösung: 1. Ändern Sie die Dateiberechtigungen oder aktivieren Sie Selinux. 2. Ändern Sie php-fpm.conf und fügen Sie die erforderliche Dateierweiterung hinzu. 3. Ändern Sie den Inhalt von php.ini in „cgi.fix_pathinfo = 0“. . Starten Sie php-fpm neu.

So beheben Sie den Nginx PHP403-Fehler

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, PHP-Version 8.1, Dell G3-Computer.

nginx php403-Fehler, wie kann man ihn beheben?

nginx + php 403 Ursachenanalyse

Problem:

Konfigurierte Website, Zugriffsfehler: Zugriff verweigert (403)

Häufige Lösungen:

1. Dateiberechtigungsproblem

Möglicherweise Da es sich um ein Dateiberechtigungsproblem handelt, gibt es keine Leseberechtigung.

Oder Selinux ist nicht geschlossen.

2. security.limit_extensions

Überprüfen Sie das Nginx-Fehlerprotokoll error.log und finden Sie den folgenden Fehler:

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......

Ab 5.3.9 hat PHP offiziell eine Konfiguration „security.limit_extensions“ hinzugefügt, die standardmäßig nur die Ausführung zulässt Dateien mit der Erweiterung „.php“ verursachen Probleme, da andere Dateitypen nicht unterstützt werden.

Offizielle Beschreibung:

; 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

Ändern Sie php-fpm.conf: (Fügen Sie die erforderliche Dateierweiterung hinzu)

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

3. cgi.fix_pathinfo

Beim Zugriff über diese URL wird ein Fehler „Zugriff verweigert“ angezeigt.

nginx-Fehlerprotokoll:

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......

Ändern Sie php.ini: (cgi.fix_pathinfo ist standardmäßig 1)

cgi.fix_pathinfo = 1

Offizielle Beschreibung:

; 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

Tatsächlich verursacht cgi.fix_pathinfo = 1 eine Schwachstelle beim Parsen von Dateitypfehlern. Es wird empfohlen, cgi.fix_pathinfo = 0 zu setzen.

( Verständnis der Schwachstelle:

Wenn cgi.fix_pathinfo=1, lautet der Zugriffspfad: /foo.jpg/file.php. Wenn die Datei file.php nicht existiert, versucht der PHP-Parser zu erraten, um welche Datei es sich handelt Sie möchten den Pfad zurücksuchen. Wenn foo.jpg vorhanden ist und PHP-Code enthält, führt der PHP-Parser nur den angegebenen Pfad aus nicht gefunden wird, beenden Sie die Verarbeitung.

Aber das Setzen von cgi.fix_pathinfo = 0 kann dazu führen, dass viele MVC-Frameworks (z. B. ThinkPHP) nicht ordnungsgemäß ausgeführt werden.

4.

Setzen Sie auf php.ini: open_basedir=/home:/tmp/:/proc/

Starten Sie php-fpm neu

Wenn Sie auf die Webseite zugreifen und Strg + F5 drücken, um sie regelmäßig zu aktualisieren, wird dies der Fall sein Melden Sie den Fehler „Zugriff verweigert“. „Zugriff verweigert“ erscheint nur gelegentlich, nicht immer 403.

nginx-Fehlerprotokollierung:

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.

Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSo beheben Sie den Nginx PHP403-Fehler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn