如果你正在使用PHP開發網站,并且希望使用nginx作為Web服務器,那么需要學習nginx如何路由PHP文件。
nginx可以使用fastcgi_pass指令將HTTP請求轉發給PHP-FPM進程,PHP-FPM將處理PHP文件,然后將結果返回給nginx,最后nginx將結果返回給客戶端。以下是nginx配置示例:
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
此配置適用于所有擴展名為.php的文件,它將請求轉發給php-fpm.sock,指定了默認的索引文件(如果在URL中沒有明確指定索引文件),并將$document_root和請求的文件名結合在一起來獲得SCRIPT_FILENAME。
以下是如何將不同類型的PHP請求路由到不同的PHP-FPM池的示例:
location /app1 { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm-app1.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/app1$fastcgi_script_name; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm-default.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/default$fastcgi_script_name; }
在這個例子中,所有與/app1相關的請求都被重定向到unix:/var/run/php-fpm-app1.sock,而其他PHP請求都被重定向到unix:/var/run/php-fpm-default.sock。指定的SCRIPT_FILENAME現在是/ www/app1或/ www / default的子目錄,而不是$document_root。
你還可以使用nginx map模塊來路由PHP請求。以下是一個示例:
map $request_uri $php_pool { ~^/app1 unix:/var/run/php-fpm-app1.sock; default unix:/var/run/php-fpm-default.sock; } location ~ \.php$ { fastcgi_pass $php_pool; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
在這個例子中,map將$request_uri轉換為一個PHP-FPM池的名稱,并將fastcgi_pass指令設置為該池的值。$request_uri以/app1開始的請求將被重定向到unix:/var/run/php-fpm-app1.sock,而其他PHP請求將被重定向到unix:/var/run/php-fpm-default.sock。
在使用nginx路由PHP時,請注意如何安全地處理用戶輸入。總是使用 htmlspecialchars或類似的函數來轉義用戶數據,以免在應用程序中引入安全漏洞。