Nginx同时处理大量请求的最佳设置是什么?
我的服务器在Ubuntu 20.04 LTS上配置了Nginx和PHP7.3。 使用Laravel 7构建正在运行的应用程序。
这是我当前的配置:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
fastcgi_buffer_size 14096k;
fastcgi_buffers 512 14096k;
fastcgi_busy_buffers_size 14096k;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
}
我通过Google找到的我放置的fastcgi参数并将其调整为一些高值。
应用程序执行以下操作:
这四个步骤都可以在几秒钟内完成。
完成此操作后,服务器的CPU或内存均未达到峰值,唯一发生的是某些用户的超时时间为502。
看起来像Nginx中的服务器配置问题。
这是服务器发生时的统计信息:
请注意,我在Laravel中禁用了VerifyCsrfToken
到为防止额外服务器负载而调用的路由。
我想念什么?我还必须更改一些PHP-FPM设置吗?如果是这样,我可以去哪儿做?
这是域的Nginx错误日志告诉我的:
2020/04/25 13:58:14 [error] 7210#7210: *21537 connect() to unix:/var/run/php/php7.3-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 54.221.15.18, server: website.url, request: "GET /loader HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.3-fpm.sock:", host: "website.url"
www.conf的设置:
pm.max_children = 100
pm.start_servers = 25
pm.min_spare_servers = 25
pm.max_spare_servers = 50
pm.max_requests = 9000
;pm.process_idle_timeout = 10s;
;pm.status_path = /status
答案 0 :(得分:0)
编辑/etc/security/limits.conf
,输入:
# vi /etc/security/limits.conf
为所有用户或nginx用户设置软限制和硬限制,如下所示:
nginx soft nofile 10000
nginx hard nofile 30000
答案 1 :(得分:0)
(11: Resource temporarily unavailable)
那是EAGAIN
/ EWOULDBLOCK
,这意味着nginx确实接受了客户端连接,但是它不能在不阻塞(等待)的情况下连接到PHP-FPM的UNIX套接字,并且很可能在不查看nginx的源代码的情况下, nginx已尝试多次连接到所述UNIX套接字,但失败了,因此nginx抛出了Connection refused
。
有几种解决方法,或者:
listen.backlog
配置值及其
相应的net.ipv4.tcp_max_syn_backlog
,net.ipv6.tcp_max_syn_backlog
和
sysctl
中的net.core.netdev_max_backlog
个值。upstream
nginx config使用这些池。