Nginx調用遠程php-fpm

來源:互聯網
上載者:User

標籤:event   back   code   img   request   fast   建立   log   如何   

在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 建立nginxcd nginxtouch 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.