最佳的Nginx配置可以在几秒钟内处理成千上万的请求

问题描述 投票:6回答:1

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参数是我在谷歌上找到的 然后把它调到了一些比较高的数值。

应用程序的功能如下:

  • 1500+用户在线
  • 他们通过Pusher直接推送一道选择题。
  • 他们几乎同时回答所有的问题=每个答案通过Ajax向服务器发出1个请求。
  • 每次回答时,都会从服务器上获取每个用户的结果。

这四个步骤都可以在几秒钟内完成。

在做这个步骤的时候,服务器的CPU和内存都没有达到峰值,唯一发生的事情是一些用户收到了502超时。

看来是Nginx的服务器配置问题。

这是发生时服务器的统计数据。

  • 系统:25%,CPU:22%,磁盘IO: 22%,磁盘IO:0% - 可用的8个处理器核心。
  • 内存:1.79GB--可用3GB

侧面说明的是,我禁用了 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
php laravel nginx nginx-config php-7.3
1个回答
0
投票

编辑 /etc/security/limits.conf,回车。

# vi /etc/security/limits.conf

设置所有用户或nginx用户的软硬限制如下。

nginx       soft    nofile   10000
nginx       hard    nofile  30000

0
投票

(11: Resource temporarily unavailable)

就是这样 EAGAINEWOULDBLOCK,这意味着nginx确实接受了客户端连接,但它无法在不阻塞(等待)的情况下连接到PHP-FPM的UNIX套接字,可能在不看nginx的源代码的情况下,nginx曾多次尝试连接到上述UNIX套接字,但都失败了,所以nginx抛出了一个 Connection refused.

有几个方法可以解决这个问题,或者。

  1. 增加 listen.backlog 配置值在你的PHP-FPM池配置中,它对应的是 net.ipv4.tcp_max_syn_backlog, net.ipv6.tcp_max_syn_backlognet.core.netdev_max_backlog 值在 sysctl.
  2. 创建多个php-pm池,然后使用 upstream nginx配置来使用这些池。
© www.soinside.com 2019 - 2024. All rights reserved.