在几秒钟内处理数千个请求的最佳 Nginx 配置

use*_*734 8 php nginx laravel nginx-config php-7.3

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;
}

Run Code Online (Sandbox Code Playgroud)

我放置的 fastcgi 参数是通过 Google 找到的,并将数字调整为一些高值。

应用程序执行以下操作:

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

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

完成此操作后,服务器的 CPU 和内存都没有达到峰值,唯一发生的事情是某些用户出现 502 超时。

看起来像 Nginx 中的服务器配置问题。

这是服务器发生时的统计信息:

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

旁注是我VerifyCsrfToken在 Laravel 中禁用了被调用以防止额外服务器负载的路由。

我错过了什么?我是否还必须更改一些 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"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

小智 0

编辑/etc/security/limits.conf,输入:

# vi /etc/security/limits.conf
Run Code Online (Sandbox Code Playgroud)

为所有用户或nginx用户设置软硬限制,如下所示:

nginx       soft    nofile   10000
nginx       hard    nofile  30000
Run Code Online (Sandbox Code Playgroud)