[关闭]
@42withyou 2015-03-04T03:05:46.000000Z 字数 2239 阅读 643

配置多个 php-fpm 解决 502

Justering


青基会红包项目,增加php-fpm到四个后每秒请求数从90到了350


服务器在遇到高并发时nginx发起的连接数,远远超过了php-fpm所能处理的数目,导致端口(或socket)频繁被锁,造成堵塞,所以容易出现502错误。

那么我们可以给php-fpm开启多个实例解决高并发下nginx出现 502 的问题

这里以青基会红包项目作为演示,启用四个php-fpm实例,把php-fpm分为四部分,每部分各听一个端口或socket,这样就减少了lock,采用nginx的upstream负载均衡,轮询每个socket来处理请求。


  1. 给每个pf增加配置文件
  1. cd /usr/local/php/etc
  2. cp php-fpm.conf php-fpm1.conf
  3. cp php-fpm.conf php-fpm2.conf
  4. cp php-fpm.conf php-fpm3.conf
  5. vim php-fpm1.conf
  6. # start php-fpm1.conf
  7. [global]
  8. # 修改处1
  9. pid = /usr/local/php/var/run/php-fpm2.pid
  10. error_log = /usr/local/php/var/log/php-fpm2.log
  11. log_level = error
  12. emergency_restart_threshold = 60
  13. emergency_restart_interval = 40
  14. [www]
  15. # 修改处2
  16. listen = /tmp/php-cgi2.sock
  17. listen.backlog = 2048
  18. listen.allowed_clients = 127.0.0.1
  19. listen.owner = www
  20. listen.group = www
  21. listen.mode = 0666
  22. user = www
  23. group = www
  24. pm = dynamic
  25. pm.max_children = 600
  26. ;pm.start_servers = 225
  27. pm.min_spare_servers = 8
  28. pm.max_spare_servers = 16
  29. request_terminate_timeout = 20
  30. request_slowlog_timeout = 0
  31. # 修改处3
  32. slowlog = /usr/local/php/var/log/slow2.log
  33. listen.allowed_clients = 127.0.0.1
  34. pm.status_path = /xxxxxxfpmstatus
  35. # end php-fpm1.conf
  1. 增加进程
  1. cd /etc/init.d/
  2. cp php-fpm php-fpm1
  3. cp php-fpm php-fpm2
  4. cp php-fpm php-fpm3
  5. vim php-fpm1
  6. php_fpm_BIN=${exec_prefix}/sbin/php-fpm
  7. php_fpm_CONF=${prefix}/etc/php-fpm1.conf # 修改处1,对应上面的配置文件
  8. php_fpm_PID=${prefix}/var/run/php-fpm1.pid # 修改处2
  9. service php-fpm1 start
  10. service php-fpm2 start
  11. service php-fpm3 start
  1. 修改 nginx 的配置文件
  1. # 在 http 块之后添加 phpbackend 是名字随便起
  2. # 把 pf 配置到不同的机器上,就是正宗的负载均衡了
  3. upstream phpbackend {
  4. # 可以选择分配模式 weight 权重,或者 ip_hash...
  5. server unix:/tmp/php-cgi.sock weight=100 max_fails=5 fail_timeout=5;
  6. server unix:/tmp/php-cgi1.sock weight=100 max_fails=5 fail_timeout=5;
  7. server unix:/tmp/php-cgi2.sock weight=100 max_fails=5 fail_timeout=5;
  8. server unix:/tmp/php-cgi3.sock weight=100 max_fails=5 fail_timeout=5;
  9. }
  1. 修改应用的 vhost 配置
  1. vim vhost/hb_test.conf
  2. server
  3. {
  4. listen 80;
  5. server_name 182.92.68.139;
  6. index index.html index.htm index.php;
  7. root /home/wwwroot/cydf_hongbao_test;
  8. include /home/wwwroot/cydf_hongbao_test/nginx_rewrite.conf;
  9. location ~ .*\.(php|php5)?$
  10. {
  11. try_files $uri =404;
  12. # 修改为上面配置的 upstream
  13. fastcgi_pass phpbackend;
  14. # fastcgi_pass unix:/tmp/php-cgi.sock;
  15. fastcgi_index index.php;
  16. include fastcgi.conf;
  17. }
  18. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  19. {
  20. expires 30d;
  21. }
  22. location ~ .*\.(js|css)?$
  23. {
  24. expires 12h;
  25. }
  26. access_log /home/wwwlogs/hongbao_test-access.log access;
  27. error_log /home/wwwlogs/hongbao_test-error.log error;
  28. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注