Nginx調用遠程php-fpm
在Nginx服務器的情況下,當我們輸入 http://localhost:8080/index.php回車的時候
瀏覽器會將請求發送給Nginx,Nginx會根據我們所配置的以.php結尾的PHP的文件交給fastcgi
location ~ \.php { root /nginx; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi.conf; }
通過fastcgi_pass命令將請求轉發給fastcgi 即php-fpm;
php-fpm是fastcgi的一種實現。
一般我們會將收到的請求轉發到本地,即php-fpm所監聽的本地端口 127.0.0.1:9000
如果我們想實現分布式,將我們的請求轉發給遠程的php-fpm來處理該怎麽去實現呢?
1.修改本地Nginx fastcgi_pass 監聽的IP:端口
fastcgi_pass 127.0.0.1:9000 修改為 x.x.x.x:9000
其中x.x.x.x代表遠程主機的IP地址
2.修改遠程php-fpm的所監聽的IP:端口
將遠程的php-fpm所監聽的IP:端口,由127.0.0.1:9000改為:0.0.0.0:9000
127.0.0.1 代表本機
0.0.0.0 代表所有本地地址,相當於一個集合:所有不清楚的主機和目的網絡。這裏的“不清楚”是指在本機的路由表裏沒有特定條目指明如何到達。
如果我們不修改遠程php-fpm監聽的IP:端口為0.0.0.0:9000
在本地直接訪問 http://localhost:8081/index.php Nginx會報錯出現 (其中x.x.x.x代表我遠程主機地址)
一般我們php-fpm沒有啟動的時候會拋出這個錯誤,但是我們的遠程php-fpm明明已經開啟了,所以無法連接到遠程php-fpm所監聽的地址。
*84 kevent() reported that connect() failed (61: Connection refused)
while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1",
upstream: "fastcgi://x.x.x.x:9000", host: "localhost:8081"
接下來我們將php-fpm監聽的IP:端口改為:0.0.0.0:9000;重啟php-fpm,然後我們繼續訪問 http://localhost:8081/index.php
這時候瀏覽器出現了
找不到文件?為什麽呢?我接著分析Nginx的配置(其中x.x.x.x代表我的遠程主機地址)
location ~ \.php { root /nginx; fastcgi_pass x.x.x.x:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi.conf; }
請特別註意”fastcgi_script_name”一行(黑體部分),PHP-CGI特別需要此行信息來確定PHP文件的位置。也就是說,當我們將請求轉發給我們fastcgi(即php-fpm)的時候,會把所請求的文件確切路徑也發給fastcgi(即php-fpm);
假如我Nginx本地服務器根目錄為/nginx,那麽我所請求的index.php的絕對路徑是/nginx/index.php,Nginx在將請求轉發給遠程php-fpm的時候,也會把這個路徑發給遠程php-fpm,遠程php-fpm會根據這個路徑/nginx/index.php找到index.php並且執行,將結果返回給本地Nginx服務器;這也就意味著我們遠程php-fpm所在的主機必須存在路徑為/nginx/index.php的文件才行,否則會報404的錯誤,文件不存在(即我們所看到的File not found.);
接下來在根目錄下建立nginx 並且在nginx內新建index.php
cd / mkdir /nginx 建立nginx cd nginx touch index.php 創建文件
vim index.php 編輯輸入PHP代碼
我們在vim index.php編輯的時候輸入如下代碼:
<?php echo ‘remote php-fpm‘; ?>
再次訪問http://localhost:8081/index.php
會出現如下的結果:
成功訪問。
小結:
1:遠程php-fpm監聽IP:端口 改為0.0.0.0:9000(端口可以適當修改,默認9000)
2:要註意請求的文件路徑地址要和本地服務器的根目錄一直,否則會報404
Nginx調用遠程php-fpm