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;
}
我放的fastcgi参数是我在谷歌上找到的 然后把它调到了一些比较高的数值。
应用程序的功能如下:
这四个步骤都可以在几秒钟内完成。
在做这个步骤的时候,服务器的CPU和内存都没有达到峰值,唯一发生的事情是一些用户收到了502超时。
看来是Nginx的服务器配置问题。
这是发生时服务器的统计数据。
侧面说明的是,我禁用了 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
编辑 /etc/security/limits.conf
,回车。
# vi /etc/security/limits.conf
设置所有用户或nginx用户的软硬限制如下。
nginx soft nofile 10000
nginx hard nofile 30000
(11: Resource temporarily unavailable)
就是这样 EAGAIN
EWOULDBLOCK
,这意味着nginx确实接受了客户端连接,但它无法在不阻塞(等待)的情况下连接到PHP-FPM的UNIX套接字,可能在不看nginx的源代码的情况下,nginx曾多次尝试连接到上述UNIX套接字,但都失败了,所以nginx抛出了一个 Connection refused
.
有几个方法可以解决这个问题,或者。
listen.backlog
配置值在你的PHP-FPM池配置中,它对应的是 net.ipv4.tcp_max_syn_backlog
, net.ipv6.tcp_max_syn_backlog
和net.core.netdev_max_backlog
值在 sysctl
.upstream
nginx配置来使用这些池。