Maison >développement back-end >tutoriel php >Comment configurer rapidement et correctement un environnement php complet (nginx et php)
Comment configurer rapidement et correctement un environnement php complet (nginx et php)
Tout d'abord, comprenons comment fonctionne nginx : https://blog. csdn.net/hguisu/article/details/8930668
nginx est un serveur http et inversement hautes performances serveur proxy. C'est-à-dire que nginx peut être utilisé comme serveur HTTP pour la publication et le traitement de sites Web, et il peut également être utilisé comme serveur proxy inverse pour l'équilibrage de charge. Mais il convient de noter que nginx lui-même n'analyse pas les fichiers PHP. Les demandes de pages PHP seront transmises par nginx à l'adresse IP et au port surveillés par le processus FastCGI, qui seront traitées par php-fpm (un gestionnaire de processus fastcgi tiers) en tant que serveur d'analyse dynamique, et enfin les résultats du traitement seront renvoyés à nginx . Autrement dit, nginx transmet les requêtes dynamiques au backend php-fpm via la fonction de proxy inverse, réalisant ainsi la prise en charge de l'analyse PHP. C'est le principe de base de l'implémentation de l'analyse dynamique PHP par Nginx.
Vous devez d’abord comprendre certains concepts. (nginx + php-fpm +fastcgi)
非阻塞IO & IO复用
qui peut gérer plusieurs clients dans un seul thread grâce à la fonction de type epoll fournie par le système d'exploitation fin de la demande. Le processus de Nginx est un thread, c'est-à-dire qu'il n'y a qu'un seul thread dans chaque processus, mais ce thread peut servir plusieurs clients. pm.max_children
spécifie le nombre maximum de processus pm.max_requests
spécifie le nombre de requêtes que chaque processus gère avant de redémarrer (car PHP a parfois des fuites de mémoire, donc un redémarrage. est obligatoire). Chaque processus de PHP-FPM n'a également qu'un seul thread, mais un processus ne peut servir qu'un seul client à la fois. Connaissances supplémentaires sur le proxy inverse et le proxy direct (en bref, les actes de proxy direct pour le client ; les actes de proxy inverse pour le serveur)
Le but du positif proxy :(1) accéder aux ressources inaccessibles, telles que Google
(2) Équilibrage de charge, via le serveur proxy inverse pour optimiser la charge du site Web
(2) peut être utilisé comme cache, accélérer l'accès aux ressources
(3) Accès à l'autorisation d'accès client, Aller en ligne Pour l'authentification
(4), le proxy peut enregistrer les enregistrements d'accès aux utilisateurs, la gestion du comportement en ligne et masquer les informations de l'utilisateur de l'extérieur) lorsqu'elle est utilisée dans le déploiement distribué de clusters de serveur, les informations sur le serveur de cache vers le proxy inversé.
(1) Pour assurer la sécurité de l'intranet, le proxy inverse est généralement utilisé comme adresse d'accès au réseau public, et le serveur Web est l'intranet2. nginx implémente l'analyse dynamique php
(nginx.conf )Pour plus de détails sur la composition de nginx.conf et la syntaxe de configuration de base, veuillez vous référer à un autre article. Ici, nous donnerons une brève introduction à plusieurs. syntaxes utilisées pour analyser la configuration PHP :
try_files $uri $uri/ /index.php$is_args$args : (https://blog.51cto.com/13930997/2311716,,, un piège dans Nginx try_files ---
Le dernier des try_files L'emplacement (repli) est spécial, il émettra une "sous-requête" interne au lieu de rechercher directement le fichier dans le système de fichiers !!!server { listen 8000 backlog=4096; server_name www.baidu.com localhost; access_log logs/access.log main; root /home/leimengyao/api/app/htdocs; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/home/leimengyao/php7/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/leimengyao/api/app/htdocs$fastcgi_script_name; include fastcgi_params; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /\.ht { deny all; } }
Comme configuré ci-dessus, lorsqu'une requête http arrive, le processus est le suivant :
Prenons http://10.94.120.124:8000/A/B?c=1&d=4 comme exemple :
location ~ .php${ ... }
catch, c'est-à-dire entrez le gestionnaire FastCGI (nginx doit être configuré via le module FastCGI pour transmettre les paramètres php pertinents à php-fpm pour le traitement. Les paramètres liés à Fastcgi_pass sont définis dans cet élément, et les ressources demandées par l'utilisateur sont envoyées à php-fpm pour traitement, cela implique la syntaxe de configuration pertinente du module nginx FastCGI qui sera présentée ci-dessous). L'URI et les paramètres spécifiques sont transmis aux programmes FastCGI et WordPress dans REQUEST_URI, afin qu'ils ne soient pas affectés par les modifications d'URI ! ! ! ! . public static function detectPath() { if (!empty($_SERVER['SCRIPT_URL'])) { $path = $_SERVER['SCRIPT_URL']; } else { //as: www.baidu.com/A/B?saadf=esdf if (isset($_SERVER['REQUEST_URI'])) { //$_SERVER['REQUEST_URI']="/m/test?saadf=esdf"; $request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); if (false !== $request_uri) { $path = $request_uri; //echo $path; /A/B //exit; } elseif ($_SERVER['REQUEST_URI'] && strpos($_SERVER['REQUEST_URI'], '?') !== false) { $path = strstr($_SERVER['REQUEST_URI'], '?', true); } } else { $path = $_SERVER['PHP_SELF']; } } return $path; }
3. Configuration de Nginx PHP FastCGI
Vous devez d'abord comprendre certains fichiers. (nginx.conf + fastcgi_params + php-fpm.conf + php.ini)
location / { fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; }
(https://www.jianshu.com/p/9bae5c49a163)
Vérifiez et trouvez que le répertoire du fichier de configuration se trouve dans le répertoire /etc, mais le chargement de php.ini n'en affiche aucun ; dans le répertoire /etc pour vérifier, il n'y a effectivement pas le fichier php.ini.
Copiez php.ini.default dans php.ini, exécutez à nouveau php --ini et vérifiez que le fichier php.ini a été chargé avec succès
php -m View listera les extensions installées de la ligne de commande PHP Cli.
Affichez la commande du répertoire d'installation de l'extension php : php-config | grep -i extension (http://www.blogdaren.com/post-2520.html )
Basculez vers ce répertoire pour afficher l'extension
Deuxièmement, découvrez certains fastcgi couramment utilisés configurations dans nginx.conf La signification de
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-<br/>fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.
UNIX Domain Socket:
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
TCP Socket(本地回环):
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 物理层 96b4fef55684b9312718d5de63fb7121 路由器 96b4fef55684b9312718d5de63fb7121 物理层 96b4fef55684b9312718d5de63fb7121 TCP/IP 96b4fef55684b9312718d5de63fb7121 socket 96b4fef55684b9312718d5de63fb7121 PHP-FPM
以上配置文件全部修改完成以后,需要进行重启nginx和php-fpm,修改的内容才能生效:
https://blog.csdn.net/tfy_2425482491/article/details/79377672
点击debug报如下错误:安装debug扩展
redis(https://www.jianshu.com/p/018bbf5ff42a)
php call_user_func_array(https://www.jianshu.com/p/1c0f30d8722d)
推荐学习:《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!