docker容器中的Nginx和其他容器中的cgi-perl



我试图构建一个web服务器,其中nginx在一个docker容器中运行,而我的Perl脚本在另一个dockercontainer中执行。我在perl容器中使用fcgiwrap+派生fcgi来运行脚本。它是有效的,但对我来说,它看起来像是单线程的。一次只能执行一个请求。如果我运行mymultiple请求,所有请求都将等待,只有1个运行。

cgi容器的Docker文件看起来像

FROM ff-base
RUN apt update &&
apt upgrade -y &&
apt-get install -y spawn-fcgi fcgiwrap
EXPOSE 9001
#CMD ["/usr/sbin/fcgiwrap", "-f", "-s", "tcp:0.0.0.0:9001"]
CMD ["/usr/bin/spawn-fcgi", "-n", "-a", "0.0.0.0","-p","9001","--","/usr/sbin/fcgiwrap"]

ff base是我的镜像,其中包括基于ubuntu 的perl安装

我试过两条CMD线路

CMD["/usr/sbin/fcgiwrap","-f","-s","tcp:0.0.0.0:9001"]和CMD["/usr/bin/spown fcgi","-n","-a","0.0.0.0","-p","9001","--","/usr/sbin/fcgiwrap"]

Nginx配置是

location ~* ^/cgi-bin/.+.cgi {
client_body_timeout  172800s;
client_max_body_size 0;
gzip off;
include fastcgi_params;
fastcgi_pass   cgi:9001;
fastcgi_request_buffering off;
fastcgi_read_timeout 900s;
fastcgi_send_timeout 900s;
fastcgi_ignore_client_abort on;
fastcgi_keep_conn on;
fastcgi_socket_keepalive on;
}

这种cgi容器的最佳配置是什么?如何使它成为多线程的,以接受多个请求?也许我应该在容器中使用其他的cgi服务器?

更新

我已经做了";实验";使用我的cgi容器,我用apache服务器(ubuntu上的典型安装(替换了initialMapRegion。我看到了完全相同的问题

但当我直接连接到这个apache(在docker内部(并在中间进行相同的上传wothout nginx时,它工作得很快。

所以,问题可能是nginx如何重新传输输入请求数据。也许这与码头集装箱之间的网络有关?我使用docker compose来运行容器

从生成fcgi、的文档

-F <children>

要分叉的子级数,默认为1。这个选项不适用于-n,如果您想在同一个套接字上监督多个分叉,请查看multiwatch(1(。

最新更新