Heim > Artikel > Backend-Entwicklung > So beheben Sie den Nginx PHP403-Fehler
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.
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!