Nginx proxy_pass 和 proxy_set_header 导致打开文件过多

Nginx proxy_pass 和 proxy_set_header 导致打开文件过多

我在 nginx 中有以下 .conf 来在服务器 a 和 b 之间进行平衡:

upstream myapp {
    server a.myapp.com;
    server b.myapp.com;
}

server {
    listen 80;
    server_name myapp.com;

    location / {
        proxy_pass http://myapp;
    }
}

在同一个 nginx 中,有两台服务器分别运行我的应用程序,分别是 php 7 和 laravel。

通过此配置,Host 标头变为“myapp”,并且 laravel 在某些 URL 系统中将其用于资产和链接。

正如文档中所述,我使用了proxy_set_header如下指令:

upstream myapp {
    server a.myapp.com;
    server b.myapp.com;
}

server {
    listen 80;
    server_name myapp.com;

    location / {
        proxy_pass http://myapp;
        proxy_set_header Host $host; #this causes too many open files
    }
}

但它会导致 nginx 日志上出现“打开文件过多”,并且请求永远无法完成。

我谷歌搜索了“打开文件过多”错误,并找到了增加限制的解决方案,但显然在这种情况下不起作用。也许存在一些我没有看到的无限循环?

我也尝试在每个应用程序 .conf 中写入 Host 标头,但是标头不是以以下任何一种方式写入的:

fastcgi_pass_header "Host myapp.com";
proxy_set_header Host "myapp.com";
add_header Host "myapp.com";

相关内容