Nginx修改演示:

vim /usr/local/nginx/conf/vhost/example.comserver{listen 80;server_name 192.168.1.180;location / {root /Code/project/public;index index.php index.html;include /usr/local/nginx/conf/rewrite/laravel.conf;        location ~ \.php$ {            fastcgi_pass   127.0.0.1:9000;            fastcgi_index  index.php;            fastcgi_param  SCRIPT_FILENAME $document_root/$fastcgi_script_name;            include        /usr/local/nginx/conf/fastcgi_params;        }}#由此处开始,是配置一段自定义的配置,如果访问站点192.168.1.180/test下的路径,会执行下方的配置-------------------------------location /test {root /Code/project/public;index index.php index.html;        location ~ \.php$ {            #注意此处配置的端口,不同的项目要使用不同的sock文件,或者IP:Port            fastcgi_pass   127.0.0.1:9001;            fastcgi_index  index.php;            fastcgi_param  SCRIPT_FILENAME $document_root/$fastcgi_script_name;            include        /usr/local/nginx/conf/fastcgi_params;#一些自定义的配置            fastcgi_connect_timeout 999999;            fastcgi_read_timeout 999999;            fastcgi_send_timeout 999999;        }    }}#保存后检测是否有配置错误../../sbin/nginx -t#nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok#nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful#确认无误后重启service nginx restart

PHP-FPM修改演示(推荐配置成功后再配置Nginx):

vim /usr/local/php/etc/php-fpm.conf[global]pid = /usr/local/php/var/run/php-fpm.piderror_log = /usr/local/php/var/log/php-fpm.loglog_level = notice[www]listen = 127.0.0.1:9000listen.backlog = -1listen.allowed_clients = 127.0.0.1listen.owner = wwwlisten.group = wwwlisten.mode = 0666user = wwwgroup = wwwpm = dynamicpm.max_children = 32pm.start_servers = 4pm.min_spare_servers = 4pm.max_spare_servers = 8pm.max_requests = 256pm.process_idle_timeout = 5s#配置自定义进程参数-------------------------------------------------------------------------#起一个名字[test]#此处必须使用不同的端口区分上方的www配置listen = 127.0.0.1:9001listen.backlog = -1listen.allowed_clients = 127.0.0.1listen.owner = wwwlisten.group = wwwlisten.mode = 0666user = wwwgroup = wwwpm = dynamicpm.max_children = 32pm.start_servers = 4pm.min_spare_servers = 4pm.max_spare_servers = 8pm.max_requests = 256pm.process_idle_timeout = 5srequest_terminate_timeout = 999999#保存后重启service php-fpm restart#查看进程,有test和wwwps aux | grep phproot      15597  0.0  0.4 179912  8328 ?        Ss   10月12   0:03 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)www       15598  0.0  0.9 188668 17688 ?        S    10月12   0:04 php-fpm: pool wwwwww       15599  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15600  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15601  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15605  0.0  0.4 181956  8052 ?        S    10月12   0:00 php-fpm: pool testwww       15803  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15811  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15854  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15855  0.0  0.4 181956  9232 ?        S    10月12   0:03 php-fpm: pool wwwwww       15941  0.0  0.4 181956  9232 ?        S    10月12   0:00 php-fpm: pool wwwwww       15942  0.0  0.4 181956  8052 ?        S    10月12   0:00 php-fpm: pool wwwwww       16241  0.0  0.4 181956  8044 ?        S    10月12   0:00 php-fpm: pool wwwwww       16242  0.0  0.4 181956  8056 ?        S    10月12   0:00 php-fpm: pool testwww       16300  0.0  0.4 181956  8056 ?        S    10月12   0:00 php-fpm: pool wwwwww       16301  0.0  0.4 181956  8056 ?        S    10月12   0:00 php-fpm: pool testwww       16418  0.0  0.4 181956  8052 ?        S    10月12   0:00 php-fpm: pool testwww       16635  0.0  0.4 181956  8052 ?        S    10月12   0:00 php-fpm: pool testwww       28059  0.0  0.4 181956  8056 ?        S    08:29   0:00 php-fpm: pool wwwwww       28302  0.0  0.4 181956  8052 ?        S    08:51   0:00 php-fpm: pool testroot      28694  0.0  0.0 112728   984 pts/0    S+   09:13   0:00 grep --color=auto php#查看网络相关,一个9000,一个9001就说明配置正常netstat -nlp | grep phptcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      15597/php-fpm: mast tcp        0      0 127.0.0.1:9001          0.0.0.0:*               LISTEN      15597/php-fpm: mast

Nginx与PHP-FPM两种通信方式:1. Tcp默认的9000端口通信:

  • php-fpm配置:listen = 127.0.0.1
  • 与nginx进程通信:fastcgi_pass 127.0.0.1:9000;
  • 优点:
    • 使用网络传输,可以跨服务器。
    • TCP通信有一些校验机制,具有更高的稳定性。
  • 缺点:
    • 性能略微比socket差。

2. Unix Socket(套接字)通信:

  • php-fpm配置 :listen = /tmp/php-cgi.sock
  • 与nginx进程通信:fastcgi_pass unix:/tmp/php-cgi.sock;
  • 优点:
    • 不使用网络协议,所以不需要走网络协议的各种处理,相对于TCP略微减少通信开销。
    • 适合单机部署。
  • 缺点:
    • 使用文件传输,不支持跨服务器。
    • 大量请求时不稳定。
    • sock是一个文件,容易忽略掉权限不足的问题,增加运维成本。

为什么 TCP比Unix Socket更稳定?

容错和重传机制:TCP 提供了许多容错和重传机制,以确保数据的可靠传输。它使用序号、确认和重传机制来检测和纠正传输中的错误,可以重新发送丢失的数据包,保证数据的完整性。而 Unix 域套接字没有内置的容错和重传机制。