nginx + php-fpm改用socket方式代理可能遇到的问题
nginx + php-fpm改用socket方式代理可能遇到的问题
1. ls /var/run/,确保目录存在
2. nginx 配置
location ~ \.php$ {#fastcgi_pass 127.0.0.1:9001;fastcgi_pass unix:/var/run/php-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
3. 修改php fpm conf
nano www.conf
;listen = 127.0.0.1:9001
listen = /var/run/php-fpm.sock
;这里owner 和group 一定要和nginx配置的user一致
listen.owner = www
listen.group = www
listen.mode = 0660
4. 问题
$ tail /var/log/nginx/error.log;
2025/09/16 15:26:47 [crit] 255#255: *1 connect() to unix:/var/run/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /?info HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:"
2025/09/16 15:26:47 [crit] 255#255: *1 connect() to unix:/var/run/php-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: _, request: "GET /?info HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:"
确保:nginx: worker process 的用户是 www, Permission denied 不是一个用户导致
5. nginx和php-fpm通信socket与TCP方式对比
unix socket方式
优点:
unix socket要比tcp快,且消耗资源少,因为socket之间在nginx和php-fpm的进程之间通信,而tcp需要经过本地回环驱动,还要申请临时端口和tcp相关资源。
缺点:
unix socket相比不是那么稳定,当并发连接数爆发时,会产生大量的长时缓存,在没有面向连接协议支撑的情况下,大数据包很有可能就直接出错并不会返回异常。
虽然socket有更少的数据拷贝和上下文切换,更少的资源占用,但是如果数据都是错的,那还有什么用呢。另外使用unix socket的话,必须nginx和fpm在同一台机器上
tcp socket方式
优点:
从稳妥的考虑肯定是使用tcp,tcp协议能保证数据的正确性,unix socket不能保证。可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。
缺点:
性能不如unix socket