nginx 多个域名选择性工作

nginx 多个域名选择性工作

这是我的第一个问题!几天前我发现 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 服务器上。

相关内容