Maison titres Comment configurer correctement Nginx + PHP

Comment configurer correctement Nginx + PHP

Jun 27, 2018 pm 03:21 PM

Pour de nombreuses personnes, configurer Nginx+PHP n'est rien d'autre que rechercher un tutoriel puis le copier-coller. Il semble qu'il n'y ait rien de mal à cela, mais en fait, de nombreuses informations sur Internet sont délabrées et pleines de lacunes. Si vous vous contentez de copier et coller sans demander une compréhension plus approfondie, vous en paierez le prix tôt ou tard. .

Supposons que nous utilisions PHP pour implémenter un contrôleur frontal, ou pour parler franchement, une entrée unifiée : envoyez toutes les requêtes PHP vers le même fichier, puis implémentez le routage en analysant "REQUEST_URI" dans ce fichier.

Configurez-le généralement comme ceci
À l'heure actuelle, de nombreux tutoriels vous apprendront à configurer Nginx+PHP comme ceci :

server {
  listen 80;
  server_name foo.com;
 
  root /path;
 
  location / {
    index index.html index.htm index.php;
 
    if (!-e $request_filename) {
      rewrite . /index.php last;
    }
  }
 
  location ~ /.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /path$fastcgi_script_name;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
  }
}
Copier après la connexion

Il y a beaucoup d'erreurs dans cela, ou du moins, il a un mauvais goût. Jetez un œil et voyez combien vous pouvez en trouver.
Nous devons d'abord comprendre la relation d'héritage des instructions dans le fichier de configuration Nginx :
Le fichier de configuration Nginx est divisé en plusieurs blocs. Les plus courants de l'extérieur vers l'intérieur sont "http", "server", ". location", etc. , la relation d'héritage par défaut est de l'extérieur vers l'intérieur, ce qui signifie que le bloc interne obtiendra automatiquement la valeur du bloc externe comme valeur par défaut.

Commençons par la directive "index"
Dans la configuration du problème, elle est définie dans "location" :

location / {
  index index.html index.htm index.php;
}
Copier après la connexion

Une fois que de nouvelles données doivent être ajoutées dans le "emplacement" futur, il y aura inévitablement des instructions "index" définies à plusieurs reprises. En effet, plusieurs "emplacements" sont dans une relation horizontale et il n'y a pas d'héritage à ce stade, "index" doit être défini dans "serveur" avec le. à l'aide de la relation d'héritage, la commande "index" peut prendre effet dans tous les "emplacements".

Jetons un coup d'œil à la commande "if"
Il n'est pas exagéré de dire que c'est la commande Nginx la plus mal comprise :

if (!-e $request_filename) {
  rewrite . /index.php last;
}
Copier après la connexion

Beaucoup de gens aiment use "if" La commande effectue une série de vérifications, mais c'est en fait la responsabilité de la commande "try_files" :
try_files $uri $uri/ /index.php
De plus, les débutants pensent souvent que le La commande "if" est constituée d'instructions au niveau du noyau, mais en fait elle fait partie du module de réécriture. De plus, la configuration de Nginx est en fait déclarative plutôt que procédurale, donc lorsqu'elle est mélangée à des instructions provenant de modules non réécrits, le résultat peut ne pas être obtenu. soyez ce que vous voulez.

Jetons un coup d'œil au fichier de configuration "fastcgi_params"
inclut fastcgi_params
Nginx a deux fichiers de configuration fastcgi, à savoir "fastcgi_params" et "fastcgi.conf", ils ne le sont pas. trop gros La seule différence est que ce dernier a une ligne de définition "SCRIPT_FILENAME" de plus que le premier :
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
Remarque : il n'y a pas de / entre $document_root et $fastcgi_script_name;
À l'origine, Nginx n'avait que "fastcgi_params". Plus tard, on a découvert que de nombreuses personnes utilisaient le codage en dur pour définir "SCRIPT_FILENAME", donc "fastcgi.conf" a été introduit pour standardiser l'utilisation.
Cependant, cela soulève une question : pourquoi faut-il introduire un nouveau fichier de configuration au lieu de modifier l'ancien fichier de configuration ? En effet, l'instruction "fastcgi_param" est de type tableau. Identique à l'instruction ordinaire : la couche interne remplace la couche externe. La différence avec l'instruction ordinaire est que lorsqu'elle est utilisée plusieurs fois au même niveau, elle est ajoutée à la place. remplacé. En d'autres termes, si "SCRIPT_FILENAME" est défini deux fois au même niveau, ils seront tous deux envoyés au backend, ce qui peut entraîner des problèmes potentiels. Afin d'éviter de telles situations, un nouveau fichier de configuration a été introduit.
De plus, nous devons également prendre en compte un problème de sécurité : lorsque PHP active "cgi.fix_pathinfo", PHP peut analyser le mauvais type de fichier en tant que fichier PHP. Si Nginx et PHP sont installés sur le même serveur, la solution la plus simple est d'utiliser la commande "try_files" pour filtrer :
try_files $uri =404;
Version améliorée
Suivez l'analyse précédente et donnez une version améliorée version. Est-elle beaucoup plus propre que la version originale :

server {
  listen 80;
  server_name foo.com;
 
  root /path;
  index index.html index.htm index.php;
 
  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }
 
  location ~ /.php$ {
    try_files $uri =404;
 
    include fastcgi.conf;
    fastcgi_pass 127.0.0.1:9000;
  }
}
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. J'espère également que tout le monde en apprendra davantage. Accueil des scripts.

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)