奇怪的等待来自node.js的静态文件在nginx代理后面expression

好的,所以标题可能有点混乱,但是这个问题真的是这样!

首先是第一件事:一点背景。

我正在为客户build立一个CI服务器,这个服务器应该用于自动testing和构build,以及他们提出的与CI有关的任务。 正在testing的解决scheme主要是networking解决scheme,这些解决scheme都在MII / NetWeaver Web服务器上运行。

这个Web服务器向开发人员提供了一个工具,它允许你在你的HTML中插入“代码片段”,然后在发送到浏览器之前,用一个可定制的值代替它。 很聪明。

但是,为了能够testing客户端代码,我需要尽可能使testing系统与此MII Web服务器分离。 所以我创build了一个小型的Node.js服务器应用程序,它就是这样做的 – 用configuration的值replaceHTML中的代码片段。

这很好用!

但是,我无法访问服务器API来testing客户端代码。 所以,使用nginx,我创build了一个反向代理,它将所有/ XMII / *请求转发给MII服务器。 简单,而且效果很好! 为了让所有的东西一起工作,我还为我的Node.js应用程序创build了一个反向代理。 这样,2个独立的服务器可以在同一个端口上访问,就像用户所期望的那样。

但是,在配对2(Node.js服务器和nginx反向代理服务器)的时候,我会在加载一些客户端文件的过程中看到1分钟(准确的说! 它从只有一个文件,到几个文件有所不同。

以下是一些屏幕截图,从Google Chrome的POV中完整显示发生了什么:

准确的1分钟负载

它说,它已经等待了1分钟的文件,并收到它在0毫秒? Loong等等

这看起来更正常。 没那么久等

这里是我的configuration文件的Node.js服务器和nginx代理。 我已经删除了篡改HTML正文的代码,因为注释它们对性能没有任何影响。

Node.js服务器:

var BASE = 'C:/Users/twj/Documents/git'; var CUSTOM_ATTRIBUTES = null; var http = require('http') ,express = require('express') ,tamper = require('tamper') //Used to tamper with the HTML ,request = require('request') //Get the configuration ,parseString = require('xml2js').parseString; //Parse the configuration var app = express(); app.use(express.bodyParser()); app.use(app.router); app.use(express.static(BASE, { maxAge: 86400000 })); app.post('*', function(req, res){ res.sendfile(BASE + req.url); }); app.listen(3000); console.log('MII Forward Manipulation running on localhost:3000'); 

nginx.conf:

 worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type text/html; sendfile on; keepalive_timeout 65; gzip off; server { listen 1337; server_name localhost; autoindex on; location /XMII { proxy_redirect off; proxy_buffering off; proxy_pass http://miiserver:50000/XMII; } location / { proxy_redirect off; proxy_buffering off; proxy_pass http://localhost:3000/; } location ~ /\.ht { deny all; } } } 

我知道有很多信息需要在这里处理,但是我真的希望有人自己亲自体验过(而不是在Google上提供答案),或者可以找出某种解决scheme的人。

好吧,也许有点晚了,但是我有完全相同的问题,几个小时后find了解决办法。

我把Nginx的代理指向了localhost,就像你一样。 它在我的旧服务器上工作,但不在新服务器上(我复制configuration的地方)。

不同的是,旧的服务器没有configurationIPv6,但新的服务器。

Nginx有时会为localhost尝试http:// [:: 1] 。 我的后端不知道V6,所以它只是没有回答。

正好一分钟后有一个超时(它也是错误日志,当设置为信息)和Nginx尝试V4和 – 瞧! 响应!

所以,解决办法:不要使用localhost,使用127.0.0.1。 🙂

我已经通过从等式中删除nginx来解决这个问题。 现在我正在使用node-http-proxy。