我已将Nginx 1.10.1配置为代理Tomcat。如果Tomcat没有运行,Nginx会执行以下操作:
这是我的Nginx配置:
events {
worker_connections 1024;
}
http {
upstream tomcat_server {
server 127.0.0.1:8080;
}
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8081;
server_name localhost;
location / {
proxy_pass http://tomcat_server;
proxy_redirect http://tomcat_server/ $scheme://$host:$server_port/;
proxy_set_header Host $host:$server_port;
}
}
}
使用Curl请求Tomcat资源会立即失败,在Linux和Windows上都会出现相同的错误(在这种情况下没有60秒的延迟):
# Windows:
> curl http://localhost:8080 -v
* Rebuilt URL to: http://localhost:8080/
* timeout on name lookup is not supported
* Trying ::1...
* connect to ::1 port 8080 failed: Connection refused
* Trying 127.0.0.1...
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8080: Connection refused
# Linux:
> curl -v http://127.107.177.129:8080
* About to connect() to 127.107.177.129 port 8080 (#0)
* Trying 127.107.177.129... Connection refused
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host
那么为什么行为不同?
Windows上的超时由proxy_connect_timeout
控制 - 如果我将其减少到1秒,我会在1秒而不是60秒后得到502错误。顺便说一句,我也不知道Nginx究竟在60秒内做了什么 - 它似乎没有重试连接,因为如果我在10秒后启动Tomcat它仍会在50秒后超时。它似乎是在挥动它的拇指。
任何人都可以对这些行为中的任何一个有所了解吗?