2015-06-24 94 views
0

我们最近从apache迁移到了nginx。Nginx PHP-FPM问题

OS - CetnOS 6 
Nginx - 1.62 (4 CPU 8 GB RAM) 
PHP-FPM (php 5.4.37) (4 CPU 8 GB RAM) 
APC (Code Cache APC 3.1.13 beta) 
Memcache (data cache) 
Soft File Limit - 300000 (/etc/security/limits.conf) 
Hard File Limit - 300000 

根据建议修改了sysctl TCP配置。

我有4个php服务器的上游php-fpm服务。

我面临两个问题:

  1. 我得到的访问日志502个状态代码表示nginx的产生502网关错误

  2. 随机连接了堆放在nginx的高达2500和php-fpm服务器我们在顶层看不到任何负载,只有1-2个进程似乎在这段时间内运行,并且在2-3分钟后没有进行任何重启,它开始正常工作,并且连接在没有重启的情况下恢复正常。

请在线

user nguser; 
worker_processes 4; 

pid /var/run/nginx.pid; 
worker_rlimit_nofile 70000; 

events { 
worker_connections 1024; 
multi_accept on; 
use epoll; 
} 

http { 
## 
# Basic Settings 
## 

sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_requests 1000; 
keepalive_timeout 65; 
send_timeout 15; 
types_hash_max_size 2048; 
server_tokens off; 
client_max_body_size 50M; 
client_body_buffer_size 1m; 
client_body_timeout 15; 
client_header_timeout 15; 
server_names_hash_bucket_size 64; 
server_name_in_redirect off; 

include /etc/nginx/mime.types; 
default_type application/octet-stream; 

## 
# Logging Settings 
## 
#access_log on; 

access_log /var/log/nginx/access.log combined; 
#error_log /dev/null crit; 
error_log /var/log/nginx/error.log error; 


#gzip on; 
gzip on; 
gzip_static on; 
gzip_disable "msie6"; 
gzip_vary on; 
gzip_proxied any; 
gzip_comp_level 6; 
gzip_min_length 512; 
gzip_buffers 16 8k; 
gzip_http_version 1.1; 
gzip_types text/css text/javascript text/xml text/plain text/x-component 
application/javascript application/x-javascript application/json 
application/xml application/rss+xml font/truetype application/x-font-ttf 
font/opentype application/vnd.ms-fontobject image/svg+xml; 

open_file_cache max=2000 inactive=20s; 
open_file_cache_valid 60s; 
open_file_cache_min_uses 5; 
open_file_cache_errors off; 

fastcgi_buffers 256 16k; 
fastcgi_buffer_size 128k; 
fastcgi_busy_buffers_size 256k; 
fastcgi_temp_file_write_size 256k; 
fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_intercept_errors on; 
reset_timedout_connection on; 

upstream fastcgiservers { 
least_conn; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
} 

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 
} 

location ~ \.php$ { 
try_files $uri =404; 
include fastcgi_params; 
fastcgi_pass fastcgiservers; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

检查nginx的配置----------------------------- ---------------------------- PHP-FPM设置------------------ ------------------------------------------------

pm.max_children = 150 
pm.start_servers = 90 
pm.min_spare_servers = 70 
pm.max_spare_servers = 100 
pm.max_requests = 1500 

任何帮助或建议将不胜感激。

感谢

回答

0

捞出用

fastcgi_buffers 256 16k; 
fastcgi_buffer_size 128k; 
fastcgi_busy_buffers_size 256k; 
fastcgi_temp_file_write_size 256k; 
fastcgi_connect_timeout 300; 
fastcgi_send_timeout 300; 
fastcgi_read_timeout 300; 
fastcgi_intercept_errors on; 
reset_timedout_connection on; 

upstream fastcgiservers { 
least_conn; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
server xxx.xxx.xx.xx:9000; 
} 

替换替换这样

server { 
    location/{ 
    proxy_pass http://backend; 
    } 
} 

upstream backend { 
    server backend1.example.com; 
    server backend2.example.com; 
    server backend3.example.com; 
} 
+0

卡里姆您好,感谢响应。我应该删除所有fastcgi参数吗?并用您的建议替换整个块表示服务器块,并从上游块中删除least_conn。 – coder

+0

是的,并替换您的服务器在服务器backend1.example.com; => xxx.xxx.xx.xx:9000; – Kernelv5

+0

Karim,我试着将所有FaceCGI设置注释掉,并从上游移除least_conns,并将提供的位置/ proxy_pass http:// backend; }在我的服务器块。但重启之后,nginx突然开始充斥着502个错误,并在恢复之后切换回正常状态。 – coder