nginx windows 10上游超时

时间:2016-09-30 18:21:02

标签: nginx docker timeout

短:

如何在Windows上为nginx设置上游超时?

长:

我目前在Windows 10上,我有一个nginx问题。 所以问题是我希望在我的开发机器上有两个不同的上游,一个指向本地运行的Web服务器,另一个指向一个docker容器。

upstream api {
    server 127.0.0.1:9000;
    server 192.168.99.100:9000;
}

location /api {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://api;
        proxy_redirect off;
}

错误消息:

  

2016/09/30 19:56:56 [错误] 9836#11440:* 154上游超时   (10060:连接尝试失败,因为连接方已执行   一段时间后没有正确回应,或建立连接   连接时因连接主机无法响应而失败   到上游,客户端:127.0.0.1,服务器:localhost,请求:" POST   / api / v1 / demoText HTTP / 1.1",上游:   " http://127.0.0.1:9000/api/v1/demoText",主持人:" localhost:9091",   推荐人:" http://localhost:9091/demo"

因此很明显nginx采用了不存在的那个并等待1分钟超时。在Mac OS X和Linux下,它按预期工作,但不在Windows下。

我在位置部分尝试proxy_read_timeout 1;但没有成功

1 个答案:

答案 0 :(得分:0)

我会检查您是否在Docker容器(例如10.0.75.2)之间实际连接到Windows端的主机适配器。在Windows端,应该调用适配器,如vEthernet (DockerNAT)

接下来,检查Windows防火墙(具有高级安全性的Windows防火墙)以确保您在那里设置了正确的防火墙(那里应该有一些默认规则)。

最后(这似乎是每次docker有更新时重置),看看是否更改了适配器上的网络类别。 这可能最好限于开发环境。您可以通过运行以下命令从运行为admin的powershell执行此操作:

Set-NetConnectionProfile -InterfaceAlias "vEthernet (DockerNAT)" -NetworkCategory Private