Nginx使用unix socket来连接fastcgi(php)

本文探讨了使用Unix Socket替代TCP Socket以提高Nginx与PHP间数据传输效率的方法。通过对比两种方式的工作原理,详细解释了Unix Socket如何减少内存消耗、CPU使用率及延迟,并提供了具体的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

曾经有一个面试官,问我有没有在原公司做过什么创新的东西,我当时懵了,的确想不出来,
因为在公司的两年一直在学习,还没有到厚积薄发。但是事后一想,有一点的确能算的上,
虽然不是我发明的,但公司其他同事的确没人想到或注意过。我在离职前一段时间,跟架构师
提过,叫他们换一下使用这种方式,不过到底有没有去做了,我也不知道。不过,那个问题
问的真的很好,能直接知道来面的这个人是不是泛泛之辈。

我提的就是用unix socket来代替tcp socket进行nginx,php之间的数据传输,当然大牛们
应该老早明了这个做法了。我是在看了APUE之后才更加理解他们差别的,当然FREEBSD上也有
大牛在讨论,结果都是一致的。因为tcp 四层协议并不只是逻辑上存在的,在操作系统内核里
都有它们对应的C代码的,那么一次请求,相当于nginx这边是四层从上往下走,
然后到php进程那边,四层协议从下往上走,然后php执行完脚本产生html,
把数据再在四层里从上往下走输送到nginx这边,而等在这边的nginx进程把那些数据又从下往上走,
然后经过一系列处理,再在四层协议里去走一遍,这次是经过eth0接口返回浏览器了。
单次请求,相当于单单nginx,php之间,那四层协议的代码都走了4次。如果高并发时,
亿级请求时呢,要消耗多少内存和cpu和时间拖延阿?如果用unix socket,
当然没有那4层协议的C代码了,虽然说也是要用到系统调用的,socket,bind,send,recv
这些函数接口都一样,但底层实现不一样。
简而言之,unix socket 就是buffer与bufer之间数据交换。而一般的大型网站,
都可以用unix socket 的,除非nginx 进程,php进程不在同一台机器上,

配置

nginx通过unix socket和fastcgi通信,比tcp socket要高效,重负荷下可以考虑。

1、在nginx.conf中修改配置为:
     fastcgi_pass  unix:/tmp/php-cgi.sock;
     #fastcgi_pass  127.0.0.1:9000;
2、在php-fpm.conf中修改配置为:

# vi /etc/php/7.0/fpm/pool.d/www.conf
listen= /dev/shm/php7.0-fpm.sock
listen.owner = www-data
listen.group = www-data

nginx和php-fpm 是使用 tcp socket 还是 unix socket ?

转载于:https://my.oschina.net/mickelfeng/blog/85446

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值