短:
如何在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;
但没有成功
答案 0 :(得分:0)
我会检查您是否在Docker容器(例如10.0.75.2)之间实际连接到Windows端的主机适配器。在Windows端,应该调用适配器,如vEthernet (DockerNAT)
。
接下来,检查Windows防火墙(具有高级安全性的Windows防火墙)以确保您在那里设置了正确的防火墙(那里应该有一些默认规则)。
最后(这似乎是每次docker有更新时重置),看看是否更改了适配器上的网络类别。 这可能最好限于开发环境。您可以通过运行以下命令从运行为admin的powershell执行此操作:
Set-NetConnectionProfile -InterfaceAlias "vEthernet (DockerNAT)" -NetworkCategory Private