So konfigurieren Sie schnell und korrekt eine vollständige PHP-Umgebung (Nginx und PHP)
Lassen Sie uns zunächst verstehen, wie Nginx funktioniert: https://blog.csdn.net/hguisu/article/details/8930668
nginx ist ein leistungsstarker http-Server und Reverse-Proxy-Server. Das heißt, Nginx kann als HTTP-Server für die Veröffentlichung und Verarbeitung von Websites und auch als Reverse-Proxy-Server für den Lastausgleich verwendet werden. Aber bitte beachten Sie: Nginx selbst analysiert keine PHP-Dateien. Anfragen für PHP-Seiten werden von nginx an die vom FastCGI-Prozess überwachte IP-Adresse und den Port übergeben, die von php-fpm (einem Fastcgi-Prozessmanager eines Drittanbieters) als dynamischer Parsing-Server verarbeitet und schließlich verarbeitet werden Die Ergebnisse werden an Nginx zurückgegeben. Das heißt, Nginx leitet dynamische Anforderungen über die Reverse-Proxy-Funktion an das Backend php-fpm weiter und realisiert so die Unterstützung für PHP-Analyse. Dies ist das Grundprinzip der dynamischen PHP-Analyse durch Nginx.
Zuerst müssen Sie einige Konzepte verstehen. (nginx + php-fpm +fastcgi)
nicht blockierendes IO- und IO-Multiplexing
-Modell. Durch die vom Betriebssystem bereitgestellte Epoll-ähnliche Funktion können mehrere IOs verarbeitet werden in einem Thread. Der Prozess von Nginx ist ein Thread, das heißt, es gibt in jedem Prozess nur einen Thread, dieser Thread kann jedoch mehrere Clients bedienen. 非阻塞IO & IO复用
模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。pm.max_children
指定的是最大的进程数量,pm.max_requests
pm.max_children
gibt die maximale Anzahl von Prozessen an (da PHP gelegentlich Speicherlecks aufweist und daher neu gestartet werden muss). Jeder Prozess von PHP-FPM hat auch nur einen Thread, aber ein Prozess kann nur einen Client gleichzeitig bedienen. Ergänzung: Kenntnisse über Reverse-Proxy und Forward-Proxy (kurz: Forward-Proxy-Vorgänge für den Client; Reverse-Proxy-Vorgänge für den Server)
Verwendung von Forward-Proxy:
( 1) Zugriff auf Ressourcen, auf die ursprünglich nicht zugegriffen werden konnte , wie Google
(2) Caching kann durchgeführt werden, um den Zugriff auf Ressourcen zu beschleunigen
. Benutzerinformationen ausblenden)Verwendung von Reverse-Proxy: Reverse-Proxy, „er fungiert als Proxy für den Server“, wird hauptsächlich in verwendet Die verteilte Bereitstellung von Serverclustern verbirgt Serverinformationen.网 (1) Um die Sicherheit des internen Netzwerks zu gewährleisten, wird normalerweise der Reverse-Proxy als Adresse des öffentlichen Netzwerks verwendet. Der Webserver ist das interne Netzwerk.
(2) Die Auslastung der Website wird optimiert Reverse-Proxy-Server. Wie man Nginx konfiguriert
try_files Der letzte Speicherort (Fallback) ist etwas Besonderes, er wird eine interne „Unteranforderung“ ausgeben, anstatt direkt im Dateisystem nach der Datei zu suchen!!!) Nginx-Speicherort ~ Eine Frage zur .php$-Konfiguration (https://segmentfault.com/q/1010000012298020)
rewrite (https://segmentfault.com/a/1190000002797606)Anhang: Nginx-Konfigurationsbezogene Syntax ( Beachten Sie, dass Nginx auch einige verfügbare globale Variablen enthält. Weitere Informationen finden Sie unter dem Link. Sie können sich auch die offizielle Nginx-Dokumentation ansehen: http://www.nginx.org/ https://www.cnblogs.com/knowledgesea/p/5175711 .html)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; } }
Wie oben konfiguriert, läuft beim Eintreffen einer http-Anfrage der Prozess wie folgt ab:
Nehmen Sie http://10.94.120.124:8000/A/B?c=1&d=4 als Beispiel:
location ~ .php${ ... }
catch abgefangen, das heißt, sie wird eingegeben Der FastCGI-Handler (nginx muss über das FastCGI-Modul und die relevanten PHP-Parameter konfiguriert werden. Übergeben Sie ihn zur Verarbeitung an PHP-FPM. In diesem Element werden Fastcgi_pass-bezogene Parameter festgelegt und die vom Benutzer angeforderten Ressourcen werden an PHP-FPM gesendet Die relevante Konfigurationssyntax des nginx FastCGI-Moduls wird im Folgenden vorgestellt. Der spezifische URI und die Parameter werden in REQUEST_URI an FastCGI- und WordPress-Programme übergeben, sodass sie von URI-Änderungen nicht betroffen sind! ! ! ! . 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. Nginx-Konfiguration
Zuerst müssen Sie einige Dateien verstehen.(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; }
php-config | die Erweiterung
Zweitens verstehen Sie die Bedeutung einiger häufig verwendeterFastcgi-Konfigurationen in nginx.conf
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:<br/> 方式1:<br/> php-fpm.conf: listen = 127.0.0.1:9000<br/> nginx.conf: fastcgi_pass 127.0.0.1:9000;<br/> 方式2:<br/> php-fpm.conf: listen = /tmp/php-fpm.sock<br/> nginx.conf: fastcgi_pass unix:/tmp/php-
<br/>Nach dem Login kopierenfpm.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 <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM
- fastcgi_index:
- fastcgi_param:
以上配置文件全部修改完成以后,需要进行重启nginx和php-fpm,修改的内容才能生效:
- 修改配置(nginx.conf,php-fpm.conf,php.ini)需要进行的操作(修改配置的时候通过 find / -name php-fpm.conf命令来查找),另外重启php-fpm(mac重启php-fpm)和nginx (nginx -s reload https://www.jianshu.com/p/2726ca520f4a 、 https://www.jianshu.com/p/9bae5c49a163)
三.nginx实现php动态解析.之配置过程中常见错误
- php-fpm需要进行一些配置修改(超时时长:request_slowlog_timeout等 php-fpm 的request_terminate_timeout设置不当导致的502错误)
- Nginx-配置误区 (fastcgi_param SCRIPT_FILENAME)
- Nginx + Php-fpm 一个神奇的502错误
- nginx+php-fpm打开index.php显示空白
- php国际化插件安装、debug插件安装(extension php.ini)
- php缓存信息关闭(https://www.cnblogs.com/JohnABC/p/3529786.html !!开启缓存会引起许多问题,视情况而定)
- ?php执行流程:https://www.jianshu.com/p/042c56e08939
四.Mac下配置神器PhpStrom开发环境
https://blog.csdn.net/tfy_2425482491/article/details/79377672
点击debug报如下错误:安装debug扩展
五.php依赖管理工具-composer
六.其他
redis(https://www.jianshu.com/p/018bbf5ff42a)
php call_user_func_array(https://www.jianshu.com/p/1c0f30d8722d)
推荐学习:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie schnell und korrekt eine vollständige PHP-Umgebung (Nginx und PHP). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!