初步了解 Nginx unix domain socket 与 TCP socket 区别(原创)

(属于个人的粗浅了解,如有纰漏 欢迎指正)
在编译安装Nginx的时候,我想绝大多数的人会在网上查阅各种安装与配置的文档,当然我也不例外。但是在配置php-fpm与Nginx交互的socket方式时产生了一个疑问,因为有的文档上写着应该这样配置:

fastcgi_pass 127.0.0.1:9000;

而有的文档上却又写着:

fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock

疑惑丛生,为什么会有两种不同的设置方式? 他们之间孰优孰劣? 优在哪? 劣又在哪?

诸多疑问使我又google、百度了很多篇文章 而综合 stackoverflow,知乎等比较靠谱一点的网站的源文档(并非那些复制粘贴而来,人与亦云的文档)后总结了以下几点:

1.采用unix domain socket方式 在访问量不是很大的情况下速度要比TCP的方式效率高一些,虽然一般情况下php与nginx服务都在本地,localhost或者 127.0.0.1也是做本地环回,但是因为不走TCP协议所以unix domain socket 的效率较高。但是稳定性不如TCP。

2.unix domain socket结合长链接配置,可以有效提高端口的复用率,明显提升服务器效率。但是在访问量较大时采用TCP与短链接会更好的应对并发请求,而且更加稳定(长链接可能会产生阻塞)。

3.unix domain socket 与TCP socket相比,前者只适合本地服务之间的通信,所以便于迁移性不如后者,因为迁移服务器时只需要设置新的ip地址与对应端口即可.

综上所述如果是仅仅用于个人开发的话 二者没有区别 但是如果是配置服务器或反向代理的话,就要根据具体情况选择性的进行设置。