温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How can I make nginx handle fastcgi requests concurrently?
fastcgi nginx

其他 - 如何使Nginx同时处理fastcgi请求?

发布于 2020-05-25 15:26:14

在ubuntu 18.04上使用最小化的fastcgi / nginx配置,看起来nginx一次只能处理一个fastcgi请求。

# nginx configuration
location ~ ^\.cgi$ { 
    # Fastcgi socket
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;

    # Fastcgi parameters, include the standard ones
    include /etc/nginx/fastcgi_params;
}

我通过使用如下cgi脚本来演示这一点:

#!/bin/bash

echo "Content-Type: text";
echo;
echo;
sleep 5;
echo Hello world

使用curl从两个并排的命令提示符访问脚本,您将看到服务器按顺序处理请求。

如何确保nginx并行处理fastcgi请求?

查看更多

提问者
Steve Hanov
被浏览
5
Soleil - Mathieu Prévot 2020-03-12 06:55

为了让Nginx并行处理fastcgi请求,您需要做一些事情:

  1. Nginx> = 1.7.1用于线程池,并且此配置:
worker_processes N; // N as integer or auto

N进程auto在哪里,进程数将等于核心数;如果您有许多IO,则可能希望超出此数目(拥有与内核一样多的进程/线程并不能保证CPU会饱和)。

就NGINX而言,线程池正在执行交付服务的功能。它由一个任务队列和一些处理该队列的线程组成。当工作进程需要执行可能很长的操作时,而不是单独处理该操作,而是将一个任务放入池的队列中,任何空闲线程都可以从中提取和处理该任务。

因此,您要选择N大于并行请求的最大数量。因此,即使您拥有4个内核,您也可以选择1000。对于IO,线程仅占用一些内存,而不会占用太多CPU。

  1. 当你有大量的等待时间很多的IO请求,你还需要aio threads'http''server''location'上下文,它是一个短为:
# in the 'main' context
thread_pool default threads=32 max_queue=65536;

# in the 'http', 'server', or 'location' context
aio threads=default;

您可能会看到,在处理缓慢的IO时,可以从Linux切换到FreeBSD。请参阅参考博客以获得更深入的了解。

NGINX Boost Performance 9x中的线程池!(www.nginx.com/blog)