好吧,标题可能有点令人困惑,但这个问题确实如此!
首先要介绍一下背景。
我正在为客户设置 CI 服务器,该服务器用于自动测试和构建以及他们提出的任何与 CI 相关的任务。正在测试的解决方案主要是 Web 解决方案,它们都在 MII/NetWeaver Web 服务器上运行。
该 Web 服务器为开发人员提供了一个工具,允许您将“代码片段”插入 HTML,然后在将其发送到浏览器之前将其替换为可自定义的值。非常智能。
但是,为了能够测试客户端代码,我需要让测试系统尽可能与这个 MII Web 服务器分离。因此,我创建了一个小型 Node.js 服务器应用程序,它的作用就是用配置的值替换 HTML 中的代码片段。
这很有效!
但是,如果没有服务器 API,我就无法测试客户端代码。因此,我使用 nginx 创建了一个反向代理,它将所有 /XMII/* 请求转发到 MII 服务器。简单,而且效果很好!为了让一切协同工作,我还为我的 Node.js 应用程序创建了一个反向代理。这样,就可以在同一个端口上访问 2 个独立的服务器,就像用户期望的那样。
但是,当将两者(Node.js 服务器和 nginx 反向代理)配对时,我发现加载某些客户端文件时会延迟 1 分钟(准确!)!从只有 1 个文件到有多个文件不等。
以下是一些屏幕截图,从 Google Chrome 的角度来看,它们准确地显示了正在发生的情况:
它说,它已经等待文件 1 分钟,并在 0 毫秒内收到了它?
这看上去正常多了。
以下是 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;
}
}
}
我知道这里有很多信息需要处理,但我真的希望有人亲身经历过这种情况(并且没有在谷歌上提供答案!;)),或者有人可以找到某种解决方案。
答案1
好吧,可能有点晚了,但我遇到了完全相同的问题并在几个小时后找到了解决方案。
我像您一样将 Nginx 代理指向 localhost。它在我的旧服务器上有效,但在新服务器上无效(我将配置复制到新服务器上)。
不同之处在于,旧服务器没有配置 IPv6,但新服务器配置了。
Nginx 有时会尝试http://[::1]对于 localhost。我的后端不知道 v6,所以它没有回答。
一分钟后就会出现超时(设置为信息时也会出现在错误日志中),然后 Nginx 尝试 v4 - 瞧!响应了!
因此,解决方案是:不要使用 localhost,使用 127.0.0.1。:)
答案2
我通过从方程式中删除 nginx 解决了该问题。现在我改用 node-http-proxy。