首页 文章

通过私有网络显示404的nginx上游负载 balancer

提问于
浏览
1

我在Digital Ocean上有两个水滴 . 一个带有nginx的负载均衡器和一个带有nginx反向代理的节点/快速网络服务器 . 我们称之为load-1和web-1 . load-1处理SSL终止并通过nginx上游模块将请求通过数字海洋提供的私人网络上的http转发到web-1 .

在它的公共IP上访问web-1时一切正常 . 通过load-1访问时,我只收到404 . 我已经验证了请求实际上已转发到web-1,这是web-1的nginx访问日志在从load-1收到的每个请求中显示的内容:

load-1.private.ip - [09 / Jan / 2017:13:14:00 0000]“GET / HTTP / 1.0”404 580“ - ”>“Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36 (KHTML,像Gecko一样)> Chrome / 55.0.2883.87 Safari / 537.36“

为什么转发请求在直接请求工作时不起作用?由于web-1在直接访问时正在工作,我将如何将请求从load-1转发到web-1一定有问题吗?

My nginx config on load-1:

upstream web-servers {
        server web-1.private.ip;
    }

    server {
        listen 80;
        listen 443 ssl;
        server_name mydomain.com;

        ssl on;
        ssl_certificate /etc/ssl/mycert.crt;
        ssl_certificate_key /etc/ssl/mykey.key;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 10m;
        ssl_prefer_server_ciphers on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        add_header Strict-Transport-Security "max-age=31536000";

        location / {
            proxy_pass http://web-servers;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
   }

My nginx config on web-1:

server {
       listen 80;

       server_name web-1.public.ip web-1.private.ip;

       location / {
           proxy_pass http://127.0.0.1:5000;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'upgrade';
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_cache_bypass $http_upgrade;
       }
   }

1 回答

  • 1

    简单地说,web-1上的Nginx不知道要使用什么配置 .

    Nginx looks at the host header确定要使用的服务器配置 . 您在load-1的代理设置中将主机设置为 mydomain.com ,但在web-1上没有 mydomain.com 的相应条目 .

    • 在web-1上设置 default_server 标志(通过将 listen 80; 指令更改为 listen 80 default_server;

    • 删除任何其他 server 块,这是唯一的块(导致Nginx将其视为默认服务器)

    • mydomain.com 添加到 server_name 列表中

相关问题