缩写:
如何在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#111440:*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;
,但没有成功
我会检查docker容器(例如10.0.75.2(与windows侧主机适配器之间是否有实际连接。在windows端,应该将适配器称为类似vEthernet (DockerNAT)
的名称。
接下来,检查windows防火墙(具有高级安全性的windows防火墙(,以确保在那里设置了正确的防火墙(应该有一些默认规则(。
最后(这似乎在docker每次更新时都会重置(,看看是否更改适配器上的网络类别这可能最好仅限于开发环境。您可以通过运行以下命令在以管理员身份运行的powershell中执行此操作:
Set-NetConnectionProfile -InterfaceAlias "vEthernet (DockerNAT)" -NetworkCategory Private