这是我的第一个问题!几天前我发现 nginx 出了点问题:域 AC 正常,其他域超时。后来:其他域正常,第一个域超时;或者每个域都正常工作。如果我重新启动 nginx - 什么都没有改变。重启后一切正常。
也许原因是有时访问者太多,nginx 会断开无法处理的连接?(以前是 apache,它偶尔会冻结 VDS)。但日志中没有错误,什么都没有。在 top 输出中,我看到只使用了 2-4 mb 的交换空间。
它是:arch linux、nginx、php-fpm。
配置文件:用户http http;
worker_processes 1;
error_log /var/log/nginx/nginx.error.log;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
error_log /var/log/nginx/http.error.log;
sendfile on;
gzip on;
gzip_static on;
gzip_vary on;
client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 5m;
large_client_header_buffers 2 1k;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
server {
listen 80;
server_name www.A.com www.B.org www.F.net;
if ($host ~* ^www\.(.+)) {set $domain $1;}
return 301 $scheme://$domain$request_uri;
}
server {
listen 80;
server_name A.com *.A.com B.org F.net;
root /home/user/public_html/$host;
access_log /var/log/nginx/$host-access.log;
error_log /var/log/nginx/server.error.log;
location / {
try_files $uri $uri/ /index.php?$args;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
try_files $uri =404;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
当然,我认为我必须找到原因,而不仅仅是解决问题。
非常感谢!
答案1
尝试增加 worker_connection 时间。或者,如果您有超过 1 个核心 - 将 worker_processes 增加到核心数。
答案2
这可能会对你有帮助...来自 Nignx wiki
client_body_buffer_size 语法:client_body_buffer_size size 默认值:8k|16k 上下文:http 服务器位置 参考:client_body_buffer_size
该指令指定客户端请求主体缓冲区大小。
如果请求体大小大于缓冲区大小,则整个(或部分)请求体将被写入临时文件。
默认大小等于页面大小乘以 2。根据平台不同,页面大小为 8K 或 16K。
当 Content-Length 请求标头指定的 size 值小于缓冲区大小时,Nginx 将使用较小的值。因此,Nginx 不会总是为每个请求分配一个此缓冲区大小的缓冲区。
使用序列化请求accept_mutex on
也可能有帮助...我通常也会检查 php-fpm 日志。最好的办法是检查服务器不提供预期页面的行为方式/原因。日志是我们在这里唯一的朋友,因此,如果您知道服务器不响应请求的时间,日志中可能会有一些东西。
哦,Nginx reload
可以这样做,而不是restart
,这将暂时停止服务。
答案3
如果您遇到类似情况,请尝试 tracert 并检查 DNS。我不确定,但我们的问题很可能出在 DNS 服务器上。