首页
登录 | 注册

nginx反向代理nodejs报错no live upstreams while connecting to upstream

问题描述:
最近公司需要使用nginx做nodejs的反向代理,upstream 大致配置如下:

upstream nodejs { 
        ip_hash;
        server 192.168.12.10:1088; 
        server 192.168.12.11:1088; 
 }

最近监控发现nginx+nodejs做的webservice接口有些失败率,查看nginx错误日志发现了问题,有大量的no live upstreams while connecting to upstream的错误。
个人理解,这个错误应该是upstream里的2台node都连不上。

后来经过查阅网上相关文档发现:

是因为nodejs的http server不支持url中有空格的(未编码),这种请求进来,对于nginx来说,就是后端的node不可用,
而上面的upstream没有配max_fails,一次就被标记为失败了,这个时候后面跟着的同一nginx进程上的请求就会no live upstreams,
从错误日志也可以看出,每次no live upstreams while connecting to upstream错误都是紧跟在2条upstream prematurely closed connection while reading response header from upstream错误后的,
而后者这个错误都是由于url里有未编码的空格引起的。

解决办法:
1.调大max_fails,调低fail_timeout,不过这个方法不彻底也不会推荐哦!
2.最好是别用http建server,用tcp反向代理或者websocket,虽然这个问题是因为url不规范,但是没法限制用户要这么传,而且即使不规范也不能造成问题。

下面将简单介绍一下websocket反向代理的配置

http{#Add to nginx.conf http section
        map $http_upgrade $connection_upgrade {
                default upgrade;
                ''      close;
        }upstream nodejs { 
        ip_hash;
        server 192.168.12.10:1088; 
        server 192.168.12.11:1088; 
 }server {
        listen       8888;
        server_name  www.icesr.com;
        index index.html index.htm index.jsp index.php;

        location / {
            proxy_pass http://nodejs;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_redirect off;

            #proxy_buffers 8 32k;
            #proxy_buffer_size 64k;

            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;
        }
    }}

以上配置即可实现nginx websocket反向代理。



相关文章

  • 昨天仿真测试环境出现了新发布的版本,一个图片在IE6等下显示不了,提示一直下载,最后显示不,谷歌浏览器显示正常的问题. 环境:CentOS 5.5 64 +nginx 1.0.15 + php-fpm(php 5.2.17p1+fastcg ...
  • 一.需求场景:有数据中心A和B.只有数据中心B内的服务器可以访问www.b.com.如今,数据中心A中有一台服务器A2也需要访问www.b.com.数据中心A中有一台有公网IP的Nginx服务器A1.数据中心B中有一台存在内网的Nginx服 ...
  • Nginx反向代理配置
    反向代理:指将自己作为代理服务器来接受Internet上的请求,然后将请求转发给后端的服务器,并将结果返回给客户端.可以这样说,反向代理就意味,你给10086打电话,中间有一个代理服务器,代理服务器经过某种算法将你分配给一个客服,然后你们之 ...
  • 首先安装tengine 地址:http://tengine.taobao.org/ https反向代理 server { listen 443; server_name 域名; ssl on; ssl_certificate /usr/lo ...
  • nginx反向代理 nginx自动进行调度处理,自动进行健康检查1,实验环境准备三台虚拟机:web1,web2,proxy2,部署后端web1,web2[[email protected] ~]# yum -y install httpd[[email protected] ...
  • nginx相关操作 Windows下操作: 1.启动: C:\server\nginx-1.14.2>start nginx 或 C:\server\nginx-1.14.2>nginx.exe 注:建议使用第一种,第二种会使你 ...

2019 jeepyurongfu.net webmaster#jeepyurongfu.net
12 q. 0.023 s.
京ICP备10005923号