我有一个依赖于nodejs和restify的RESTful API。 它正在8989端口服务。
我有nginx听444端口,我有这样的代理通行证
location /v1/ { proxy_pass http://localhost:8989; }
任何呼叫类似的东西
http://localhost:444/v1/hello
工作正常,但只是第一次。 第二次恰好在60秒后响应。 如果您取消请求并再次尝试,那么它会再次运行,但下一次将会一样。 所以,每次成功的通话之后都会有一个延迟60秒。
只有在服务在nodejs上运行时才会发生。 我曾尝试改变API框架来expression和Percolator js,并有同样的问题。 但是,当我尝试与C#NancyFx API此问题不会发生。
此外,如果您尝试直接访问服务,那是类似的
http://localhost:8989/v1/hello
它总是看起来很好。
在查看发送到retify服务器的头文件后,我发现接下来的两件事,通过nginx代理调用它时,有两个头文件:
GET /v1/menu/esp.json HTTP/1.0 connection: close
当直接调用它时,有两个标题
GET /v1/menu/esp.json HTTP/1.1 connection: keep-alive
鉴于此,我认为restify服务器延迟了下一次调用,因为现在为时尚早。
所以我做了必须让nginx传递完全一样的头文件。 那么configuration是:
upstream services { server localhost:8989; keepalive 100; } server { listen 444; server_name localhost; location /v1/ { proxy_http_version 1.1; proxy_set_header Host localhost:8989; proxy_set_header Connection keep_alive; proxy_pass http://services; } }
我已经得到它传递完全相同的标题到nodejs restify服务器,但行为是完全一样的比以前。
我使用的是nodejs和nginx的windows版本。
我使用补丁
proxy_connect_timeout 2s;
正如其他人在这里http://forum.nginx.org/read.php?15,239760,247173
这似乎是一个已知的问题。