Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur nginx php403

Comment résoudre l'erreur nginx php403

藏色散人
藏色散人original
2022-11-23 09:59:142525parcourir

Solution d'erreur nginx php403 : 1. Modifiez les autorisations de fichier ou activez selinux ; 2. Modifiez php-fpm.conf et ajoutez l'extension de fichier requise ; 3. Modifiez le contenu de php.ini en "cgi.fix_pathinfo = 0" ; . Redémarrez php-fpm.

Comment résoudre l'erreur nginx php403

L'environnement d'exploitation de ce tutoriel : système linux5.9.8, PHP version 8.1, ordinateur Dell G3.

Erreur nginx php403, comment résoudre ?

nginx + php 403 Analyse des causes

Problème :

Site Web configuré, erreur d'accès : Accès refusé (403)

Solutions courantes :

1. problème

Il se peut être un problème d'autorisation de fichier, il n'y a pas d'autorisation de lecture.

Ou selinux n'est pas fermé.

2. security.limit_extensions

Vérifiez le journal des erreurs nginx error.log et trouvez l'erreur suivante :

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

À partir de la version 5.3.9, PHP a officiellement ajouté une configuration "security.limit_extensions", qui autorise uniquement l'exécution par défaut. Les fichiers avec l'extension ".php" provoquent des problèmes car les autres types de fichiers ne sont pas pris en charge.

Description officielle :

; 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

Modifier php-fpm.conf : (Ajouter l'extension de fichier requise)

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

3. cgi.fix_pathinfo

Accès via cette URL, une erreur d'accès refusé s'affiche.

Journal des erreurs 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......

Modifier php.ini : (cgi.fix_pathinfo par défaut est 1)

cgi.fix_pathinfo = 1

Description officielle :

; 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

En fait, cgi.fix_pathinfo = 1 provoquera une erreur d'analyse de type de fichier lors de l'analyse de la vulnérabilité. Il est recommandé de définir cgi.fix_pathinfo = 0 .

( Compréhension de la vulnérabilité :

Lorsque cgi.fix_pathinfo=1, le chemin d'accès est : /foo.jpg/file.php. Si le fichier file.php n'existe pas, l'analyseur php tentera de deviner quel fichier vous souhaitez exécuter. , regardez en arrière sur le chemin. Si foo.jpg existe et contient du code PHP, l'analyseur PHP exécutera foo.jpg Lorsque cgi.fix_pathinfo=0, l'interpréteur PHP essaie uniquement le chemin indiqué. n'est pas trouvé, arrêtez le traitement.

)

Mais définir cgi.fix_pathinfo = 0 peut empêcher de nombreux frameworks MVC (tels que ThinkPHP) de fonctionner correctement.

4.

Définissez sur php.ini : open_basedir=/home:/tmp/:/proc/

Redémarrez php-fpm

Lorsque vous accédez à la page Web et appuyez sur ctrl + F5 pour actualiser fréquemment, il sera signaler une erreur d’accès refusé. Accès refusé n'apparaît qu'occasionnellement, pas 403 tout le temps.

Journalisation des erreurs 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.

Apprentissage recommandé : "

Tutoriel vidéo PHP

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn