在 linux 中,nginx 服務器和 php-fpm 能夠經過 tcp socket 和 unix socket 兩種方式實現。 php
一下內容轉自:https://blog.csdn.net/qq624202120/article/details/60957634linux
tcp socket nginx
容許經過網絡進程之間的通訊,也能夠經過loopback進行本地進程之間通訊。緩存
unix socket 服務器
容許在本地運行的進程之間進行通訊。網絡
對比分析:php7
從上面的圖片能夠看,unix socket 減小了沒必要要的 tcp 開銷,而 tcp 須要通過 loopback,還要申請臨時端口和 tcp 相關資源。可是,unix socket 高併發時候不穩定,鏈接數爆發時,會產生大量的長時緩存,在沒有面向鏈接協議的支撐下,大數據包可能會直接出錯不返回異常。tcp這樣的面向鏈接的協議,多少能夠保證通訊的正確性和完整性。 併發
如何選擇 負載均衡
若是是在同一臺服務器上運行的 nginx 和 php-fpm,併發量不超過1000,選擇 unix socket,由於是本地,能夠避免一些檢查操做(路由等),所以更快,更輕。 若是面臨高併發業務,選擇使用更可靠的 tcp socket,以負載均衡、內核優化等運維手段維持效率。 運維
nginx 和 php-fpm 使用 unix socket
將sock文件放在/dev/shm目錄下,使用的內存讀寫更快。
1 # cd /dev/shm 2 touch php7.0-fpm.sock 3 chown www-data:www-data php7.0-fpm.sock 4 chmod 777 php7.0-fpm.sock
php-fpm.conf
1 # vi /etc/php/7.0/fpm/pool.d/www.conf 2 listen= /dev/shm/php7.0-fpm.sock 3 listen.owner = www-data 4 listen.group = www-data
nginx location 配置
1 location ~* \.php$ { 2 fastcgi_pass unix:/dev/shm/php7.0-fpm.sock; 3 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 4 include /etc/nginx/fastcgi_params; 5 }
提升nginx和php-fpm使用的 unix socket穩定性(單機能力有限)
1.修改內核參數
1 net.unix.max_dgram_qlen = 4096 2 net.core.netdev_max_backlog = 4096 3 net.core.somaxconn = 4096
2.提升 backlog
backlog 默認位128,1024這個值最好換算成本身正常的QPS。
1 nginx.conf 2 server{ 3 listen 80 default backlog=1024; 4 } 5 6 php-fpm.conf 7 listen.backlog = 1024 8 9 ---------------------
3.增長 sock 文件和 php-fpm 實例
在 /dev/shm 新建一個 sock 文件,在 nginx 中經過 upstream 魔抗將請求負載均衡到兩個 sock 文件, 而且將兩個 sock 文件分別對應到兩套 php-fpm 實例上。