Nginx是一個高性能的Web服務器,可以作為負載均衡器、反向代理等多種角色。在使用Nginx作為Web服務器時,往往需要將其配置為支持解析PHP代碼。本文將針對Nginx如何解析PHP進行詳細探究。
Nginx也可以為PHP提供服務,nginx以HTTP請求為中心,效率高,在高并發訪問時負載比較小。解析PHP的方式主要有兩種:FPM和FastCGI。
PHP處理方式之1:FastCGI
FastCGI是一種比CGI更快速、更穩定的通用的CGI解決辦法。FastCGI程序像常規CGI程序一樣運行,但是不會在每次請求時重新啟動,而是通過監聽端口一直運行著,等待Nginx轉發請求。與CGI程序相比,FastCGI在進程優化上可以大幅優化性能。
在nginx中,解析php需要用到fastcgi模塊。其配置方式如下:
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }配置實例:當客戶端請求一個PHP文件時,必須將處理權轉交給Php?cgi進程。在配置成功之后,如果客戶端請求的URL中存在.php,則會自動被參數設置處理,從而轉交處理權。在這個過程中,Nginx會將主體(也就是php代碼)發送給FastCGI進程,FastCGI進程會解析執行,將執行結果返回給Nginx。 PHP處理方式之2:PHP-FPM PHP-FPM全稱為PHP FastCGI Process Manager。它是一個FastCGI實現的進程管理器,不同于PHP的前輩process manager – php-cgi。與php-fpm相比,php-cgi在處理靜態文件時效率較低。 PHP-FPM通過解析客戶端的PHP請求,將請求分配給不同的進程組來處理。PHP-FPM的一個進程組是由一個主進程和一些工作進程(池)組成的,主進程主要負責進程池的初始化、清理以及各種信號的處理等。 在nginx中,PHP-FPM的配置方式如下:
location ~ \.php$ { # This is the socket configured in php-fpm pool # Listen 127.0.0.1:9000 is relevant also fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; # Set the SCRIPT_FILENAME variable fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Pass other FastCGI parameters include fastcgi_params; }配置實例:此方式需要先安裝php-fpm,并配置好監聽的端口或套接字文件,來接收請求,并將其分配給不同的進程組。Nginx會將客戶端的請求發送到php-fpm監聽的端口號,php-fpm解析執行后將處理結果返回給Nginx。 綜上所述,在Nginx中解析PHP有兩種方式,分別是FastCGI和FPM。兩種方式各有優缺點,需要結合實際情況進行選擇。通過Nginx與PHP之間良好的協調,可以使Web服務運行的更加穩定、快速、高效。