【问题标题】:nginx Reverse Proxy with 2 servers带有 2 台服务器的 nginx 反向代理
【发布时间】:2021-02-20 15:41:36
【问题描述】:

所以我遇到了一个很酷的项目,我想重新创建它。这是我第一次使用 nginx,也是我第一次学习有关反向代理的知识。我目前正在运行一个反向代理并且它可以工作(我猜)。但代理目前仅适用于其他端口。我有 3 台运行 nginx 的服务器。我使用其中一个作为我的反向代理。我可以使用不同的端口访问其他服务器。见这里(reverse-proxy.conf):

server {
        listen 80;
        root /var/www/html;
        server_name localhost;

        location / {
                    proxy_pass http://192.168.2.20;
        }
}

server {
        listen 8080;
        root /var/www/html;
        server_name localhost;

        location / {
                    proxy_pass http://192.168.2.30;
        }
}

有没有办法在不使用不同端口的情况下使用反向代理?或者我的解决方案可以吗?最后,我只需要一个能够与其他 2 台服务器通信的反向代理。

【问题讨论】:

    标签: nginx nginx-reverse-proxy


    【解决方案1】:

    所以这里人们以不同的方式使用反向代理

    但最通用的用例是使用位置重定向

    请看下面的例子。

    server {
            listen 80;
            root /var/www/html;
            server_name localhost;
    
            location /a {
                        proxy_pass http://192.168.2.20;
            }
            location /b {
                        proxy_pass http://192.168.3.20;
            }
    }
    

    另一个是给每个代理weight

    请看下面的例子

    stream { 
    upstream stream_backend { 
        server http://192.168.2.20 weight=75;
        server http://192.168.3.20 weight=25; 
    } 
    server { 
        listen 80;
        root /var/www/html;
        server_name localhost;
    
        location / {
        proxy_pass stream_backend;
    } 
    

    }

    192.168.2.20 将接收 75% 的负载,192.168.3.20 将接收 25% 的负载。如果您想将相等的负载分配给两者(或round-robin method),请移除重量。

    【讨论】:

    • 好的,所以当我尝试与我的代理 (192.168.2.40) 通信时,我可以这样做:192.168.2.20/b
    • 我无法理解你的问题
    【解决方案2】:

    我想你可能不明白 Nginx 是如何处理代理的。 Nginx 可以反向代理 L7 http 或 L4 流 并且您设置代理侦听您想要的任何端口或 URL,并代理到您想要的任何服务器或端口或 URL。

    server {
            listen 80;
            root /var/www/html;
            server_name localhost;
    
            location / {
                        proxy_pass http://192.168.2.20:2323/URL;
            }
    }
    server {
            listen 8080;
            root /var/www/html;
            server_name localhost;
    
            location / {
                        proxy_pass unix:/tmp/backend.socket;
            }
    }
    

    这里是关于 proxy_pass 指令的参考。 proxy_pass

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2018-01-20
      • 2017-08-16
      • 2017-07-17
      • 2020-08-19
      • 2020-06-29
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多