【发布时间】:2022-01-24 17:13:21
【问题描述】:
我尝试构建 Web 服务器,其中 nginx 在 docker 容器中运行,而我的 Perl 脚本在其他 docker 容器中执行。 我在 perl 容器中使用 fcgiwrap + spawn-fcgi 来运行脚本。 它有效,但在我看来这是单线程的。一次只能执行一个请求。如果我运行 myltiple requests ,所有将等待并且只有 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/spawn-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 容器进行了“实验”,我已将 initialMapRegion 替换为 apache 服务器(在 ubuntu 上的典型安装)。 我看到完全相同的问题!
但是当我直接连接到这个 apache(在 docker 内)并在中间不使用 nginx 的情况下进行相同的上传时,它工作得很快。
所以,问题可能是 nginx 如何重新传输输入请求数据。也许它与docker容器之间的网络有关?我使用 docker-compose 来运行容器
【问题讨论】: