我有一个在某个端口上运行的 express.js 应用程序,其nginx
配置如下:
server {
server_name example.com;
access_log /var/www/example/log/nginx.access.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://localhost:3000;
}
}
提供index.html
的路线/source
包含如下脚本:
<script src="/source/assets/js/script.js"></script>
问题是它无法加载该脚本,请求导致502 Bad Gateway
。
尽管
curl http://example.com/source/assets/js/script.js
工作正常,就像在浏览器中输入此 URL 一样...仅引用来自则index.html
不行...与 相同style.css
。
在日志中我看到这个:
90.100.44.55 - - [26/Mar/2016:22:47:13 +0000] "GET /source/assets/js/script.js HTTP/1.1" 502 574 "http://example.com/source" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
有效的直接请求(curl 或浏览器)如下所示:
90.100.44.55 - - [26/Mar/2016:22:47:24 +0000] "GET /source/assets/js/script.js HTTP/1.1" 200 8358 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
有任何想法吗?
更新:
我启用了 nginx 错误日志:
2016/03/27 00:26:36 [error] 32079#0: *319759 connect() failed (111: Connection refused) while connecting to upstream, client: 90.100.44.55, server: example.com, request: "GET /source/assets/css/styles.css HTTP/1.1", upstream: "http://127.0.0.1:3011/source/assets/css/styles.css", host: "example.com", referrer: "http://example.com/source"
但当我这样做
http://127.0.0.1:3011/source/assets/css/styles.css
在服务器上,它可以工作:/
答案1
这是pm2
问题:nginx:连接到上游时 connect() 失败(111:连接被拒绝)
这个解决方案(而不是 127.0.0.1 localhost
)对我来说不起作用......
我查看了pm2
日志,发现这是问题所在(我也在使用node-config
):https://github.com/lorenwest/node-config/issues/244
WARNING: NODE_APP_INSTANCE value of '0' did not match any instance config file names.
WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode
我猜pm2
这对于生产来说还不够好,我打算尝试Phusion Passenger
节点。
我仍然不知道 pm2 如何能够看出与浏览器请求之间的区别curl
......但无论如何,唯一的解决方案似乎是不使用pm2