Maison > Article > développement back-end > Comment résoudre l'erreur nginx php403
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.
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 PHPCe 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!