nginx:使用 node.js varnish 和 stunnel 时出现 502 错误网关

nginx:使用 node.js varnish 和 stunnel 时出现 502 错误网关

我一直在关注本教程,一切似乎都运行正常,除了我的 nginx 设置。我的node.js应用程序在端口 1337 上运行,varnish 在端口 80 上运行,stunnel 在 443 上运行,nginx 在 8080 上运行。

当我指定端口时,我可以正确访问我的应用程序https://example.com:1337,但访问时得到的https://example.com只是一个502 Bad Gateway错误。

这是我的 nginx 日志的输出:

2012/08/25 14:13:59 [error] 6049#0: *1 no live upstreams while connecting to upstream, client: 127.0.0.1, server: example.com, request: "GET / HTTP/1.1", upstream: "http://app_example/", host: "example.com"
2012/08/25 14:14:02 [error] 6049#0: *1 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:1337/", host: "example.com"

这是该域的 nginx 配置文件:

upstream example.com {
    server 127.0.0.1:1337;
}

server {
    server_name  example.com;
    listen 8080;
    location / {
            proxy_pass      http://example.com;
            proxy_redirect  off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

我在跑:

  • Ubuntu 12.04
  • nginx/1.1.19
  • 隧道 4.42
  • varnish-3.0.2

答案1

首先,该链接说他们只使用 nginx 来处理网站的静态文件和 html 文件。您正在尝试通过 nginx 代理 nodejs/websockets。

那么为什么该网站说不要这样做? 主要是因为 nginx 的稳定版本不支持 websockets。

Websockets 是 1.1 规范,而 nginx 只是 1.0 规范。话虽如此,您可以像 tcp_proxy 一样为 nginx 编译,但只需像该网址指出的那样使用 varnish 代理即可。这样做没有多大意义

varnish->nginx->节点

做就是了

清漆->节点

相关内容