【问题标题】:Proxy Forward based on FQDN基于 FQDN 的代理转发
【发布时间】:2021-03-20 12:28:53
【问题描述】:

我正在尝试更好地加强和保护我的家庭网络。我目前的一个项目是设置一个代理服务器,它转发到我内部的服务器。我可以让 80 和 443 指向这台服务器,而不是打开多个端口。不幸的是,我的其中一台服务器 (server2) 是我的项目服务器,它在不同的端口上运行多个 web 应用程序。

这是我想象中的样子:

  1. 代理服务器接收https://server1.internal.com
  2. 它处理对https://server1.internal.com的请求
  3. 代理接收https://server2a.internal.com
  4. 转发到https://server2.internal.com:8080
  5. 代理接收https://server2b.internal.com
  6. 转发到https://server2.internal.com:8081

我没有手动指定每个前锋的问题,因为没有那么多。我只是无法找到如何做到这一点。此外,每个内部服务器都在运行 Let's Encrypt certbot,因此端口 80 需要可访问(转发)到每个服务器以进行证书更新。

谢谢!

【问题讨论】:

    标签: apache nginx proxy


    【解决方案1】:

    如果您想直接配置 - 您可以像这样描述 server1 上的所有服务器(如果 server1.internal.com 是 server2 的代理)。

    upstream internal1 {
      server server1.internaal.com;
    }
    
    upstream server2a {
      server server2.internal.com:8080;
    }
    
    upstream server2b {
      server server2.internal.com:8081;
    }
    
    server {
      listen 80;
      server_name server1.internal.com;
    
      location /.well-known {
        #root of your project on this server
        #or directory where lays .well-known
        root /var/www;
      }
    
      #other insecure requests will receive 301 redirect to https
      location / {
        return 301 https://server1.internal.com$request_uri;
      }
    }
    
    server {
      listen 80;
      server_name server2a.internal.com;
    
      #proxy .well-known to server with certbot
      location /.well-known { proxy_pass https://server2a; }
    
      #all other requests receives redirect to https
      location / {
        return 301 https://$host$request_uri;
      }
    }
    
    #the same for server2b
    server {
      listen 80;
      server_name server2b.internal.com;
    
      #proxy .well-known to server with certbot
      location /.well-known { proxy_pass https://server2a; }
    
      #all other requests receives redirect to https
      location / {
        return 301 https://$host$request_uri;
      }
    }
    
    server {
      listen 443 ssl;
      server_name server1.internal.com;
    
      location / {
        root /var/www/html;
        #all other options for server1
      }
    }
    
    server {
      listen 443 ssl;
      server_name server2a.internal.com;
    
      ssl_certificate ...;
      ssl_certificate_key ...;
      #other ssl options...
    
      #proxy all requests to upstream named server2a
      location / {
        proxy_pass https://server2a;
      }
    }
    
    server {
      listen 443 ssl;
      server_name server2b.internal.com;
    
      ssl_certificate ...;
      ssl_certificate_key ...;
      #other ssl options...
    
      #proxy all requests to upstream named server2a
      location / {
        proxy_pass https://server2b;
      }
    }
    

    但是如果您的服务器之间只有一个入口点和受信任的网络,则您不必将 certbot 保留在第二台服务器上,并且通常使用 https 在 nginx-proxy 和您的应用程序之间进行通信。让第一台服务器处理用户到服务器的 certbots 和 https,并将用户的请求转发到应用程序。

    【讨论】:

    • 请允许我澄清一下,我的措辞似乎有些混乱。代理服务器独立于 server1 和 server2(a,b)。 (反向)代理将是从外部到这些服务器的所有流量的单一入口点。此外,我也在尝试对所有内部流量进行加密,这就是为什么我要让 certbot 在每个内部服务器上运行。这有意义吗?
    • 好的。然后您应该将 server{} 更改为 server1.internal.com 并使其与所有其他服务器一样。
    猜你喜欢
    • 2015-09-25
    • 2016-08-17
    • 2012-07-01
    • 2018-07-17
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多