php7 - Nginx中fastcgi_pass的設定問題
某草草
某草草 2017-05-16 17:18:04
0
1
595

在設定nginx的時候,fastcgi_pass的設定問題,如下所示:

    location ~ \.php$ {
        root           /home/wwwroot;
        fastcgi_pass   127.0.0.1:9000;
        #fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
        #fastcgi_pass  unix:/tmp/php-cgi.sock;
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

主要是關於fastcgi_pass參數,

#fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
#fastcgi_pass  unix:/tmp/php-cgi.sock;

這兩種方式有什麼差別,php7該用哪一個?

某草草
某草草

全部回覆(1)
大家讲道理

Nginx和PHP-FPM的進程間通訊有兩種方式,一種是TCP,一種是UNIX Domain Socket.
其中TCP是IP加埠,可以跨伺服器.而UNIX Domain Socket不經過網路,只能用於Nginx跟PHP-FPM都在同一伺服器的場景.用哪一種取決於你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0 .0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中其中php-fpm.sock是一個檔案,由php-fpm產生,型別是srw-rw----.

UNIX Domain Socket可用於兩個沒有親緣關係的進程,是目前廣泛使用的IPC機制,比如X Window伺服器和GUI程式之間就是透過UNIX Domain Socket通訊的.這種通訊方式是發生在系統核心里而不會在網路裡傳播.UNIX Domain Socket和長連接都能避免頻繁創建TCP短連接而導致TIME_WAIT連接過多的問題.對於進程間通訊的兩個程序,UNIX Domain Socket的流程不會走到TCP那層,直接以檔案形式,以stream socket通訊.如果是TCP Socket,則需要走到IP層,對於非同一台伺服器上,TCP Socket走的就更多了.

UNIX Domain Socket:
Nginx socket PHP-FPM
TCP Socket(本地回環):
Nginx socket TCP/IP socket PHP-FPM
TC (Nginx與PHP-FPM位於不同伺服器):
Nginx socket TCP/IP 實體層 路由器 實體層 TCP/IP socket PHP-FPM

像mysql命令列客戶端連接mysqld服務也類似有這兩種方式:
使用Unix Socket連接(預設):
mysql -uroot -p --protocol=socket --socket=/tmp/mysql. sockmysql -uroot -p --protocol=socket --socket=/tmp/mysql.sock
使用TCP连接:
mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306使用TCP連線:

mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306🎜
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!