Nginx調用遠程php-fpm

在Nginx服務器的狀況下,當咱們輸入 http://localhost:8080/index.php回車的時候php

瀏覽器會將請求發送給Nginx,Nginx會根據咱們所配置的以.php結尾的PHP的文件交給fastcginginx

  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;vim

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:9000php-fpm

    其中x.x.x.x表明遠程主機的IP地址學習

   2.修改遠程php-fpm的所監聽的IP:端口spa

   將遠程的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

更過的進階技術能夠關注公衆號:進階的腳步  回覆學習資料  有驚喜哦

相關文章
相關標籤/搜索