使用iframely连接到上游时,nginx + node.js =失败

时间:2016-01-26 05:00:14

标签: node.js nginx

我尝试使用Iframely。我在我的服务器ubuntu + nginx上安装自托管版本: https://iframely.com/docs/host

当我像这样启动节点时: # node server  Iframely运作良好 否则,我得到502错误的网关错误。

ERROR

在日志错误中:

2016/01/25 06:06:58 [error] 13265#0: *4476 connect() failed (111: Connection refused) while connecting to upstream, client: xx:xx:xx:xx:xx:xx, server: iframely.custom.com, request: "GET /iframely?url=http://coub.com/view/2pc24rpb HTTP/1.1", upstream: "http://127.0.0.1:8061/iframely?url=http://coub.com/view/2pc24rpb", host: "iframely.custom.com"

当我尝试: # curl -i 127.0.0.1:8061/iframely?url=http://coub.com/view/2pc24rpb

确认错误: curl: (7) Failed to connect to 127.0.0.1 port 8061: Connection refused

我从节点开始,我明白可能node.js没有侦听端口8061.

当我尝试: netstat -pantu

我没有看到有问题的端口,但其他像这样的其他node.js应用程序使用的端口完美运行:

tcp6 0 0 127.0.0.1:4567 127.0.0.1:60724 ESTABLISHED 12329/node

CONFIGURATION

我的主机配置:

upstream iframely.custom.com {
        ip_hash;
        server localhost:8061;
        keepalive 8;
}
server {

        listen 80;
        listen [::]:80;
        server_name iframely.custom.com;
        root /usr/share/nginx/html/iframely.custom.com;

        # Logs
        access_log /var/log/iframely.access_log;
        error_log /var/log/iframely.error_log;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;

                proxy_pass http://iframely.custom.com/;
                proxy_redirect off;

                # Socket.IO Support
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }

        # Exclude from the logs to avoid bloating when it's not available
        include drop.conf;

}

我试图更改配置localhost for 127.0.0.1,但它不会改变任何内容。

如何使node.js应用程序保持活动状态:我必须永远重启吗? 这可能是ipv4或ipv6的问题吗?

我在serverfault上发布这个问题因为我认为这是nginx配置的问题。但有人认为我错了。

提前感谢您的帮助。 JB

3 个答案:

答案 0 :(得分:1)

首先,你应该让节点应用程序监听端口8061,它应该显示在“netstat -tpln”中,例如:

tcp        0      0 127.0.0.1:8061          0.0.0.0:*               LISTEN      21151/node

其次,你应该用curl测试它。如果采取了响应,则节点服务器可以正常工作。

最后,将焦点转移到nginx。

答案 1 :(得分:1)

只有一个后端,使用upstream模块没有任何好处。您可以删除upstream部分并更新proxy_pass行,如下所示:

    proxy_pass http://127.0.0.1:8061/;

后端也可能正在侦听IP,但是没有响应名称“localhost”。这不太可能,但可能。但它必须侦听某些IP地址,因此使用IP地址更安全。

弗拉迪斯拉夫的上述建议也很好。

答案 2 :(得分:0)

我永远使用https://github.com/foreverjs/forever

解决问题