当前配置

当前配置

我有一台小型机器作为我网络的入口点,我们称之为 A。我的私人网络上还有两台无法从外部访问的服务器,我们称之为 B1 和 B2。

我们假设 B1 具有私有地址 1.1.1.1,而 B2 具有私有地址 2.2.2.2。

我希望 A 有一个基本的 nginx 配置,代理任何发往 B1 的请求b1.com*.b1.com以及发往b2.comB2的请求*.b2.com。B1 和 B2 负责处理所需的证书和它们希望公开的端点。A 不会存储任何 SSL 证书,并且在查询时会传递 B1 或 B2 的证书。

有没有办法用 nginx 实现这个?

当前配置

我在 A 中使用了以下配置,其中 A 拥有所有必要域名的证书。这些都包含在http区块中。

  • B1.conf
    server {
      server_name b1.com;
      server_name *.b1.com;
    
      listen 80;
      listen [::]:80;
    
      location / {
        return 301 https://$host$request_uri;
      }
    }
    
    server {
      server_name b1.com;
      server_name *.b1.com;
    
      listen 443 ssl;
      listen [::]:443 ssl;
    
      ssl_certificate /etc/letsencrypt/live/b1/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/b1/privkey.pem;
      include /etc/letsencrypt/options-ssl-nginx.conf;
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
      location / {
        proxy_pass https://1.1.1.1;
    
        proxy_pass_request_headers on;
        proxy_pass_header Content-Type;
    
        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;
        proxy_set_header X-Forwarded-Host $http_host;
    
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
      }
    }
    
  • B2.conf:与上面相同,但b1将 替换为b2,并将1.1.1.1替换为2.2.2.2

期望的行为

我希望能够删除配置中的 ssl 部分,这样当我连接到 b1.com 时,A 会直接返回 B1 提供的 ssl 证书。从某种意义上说,我希望 A 完全透明,因为它只会传递请求和回复。

这样,我就可以一次性配置好 A,任何我想做的更改都只需要在 B1 或 B2 上进行。例如,如果我想要一个新域名new.b1.com,我只需要在 B1 上更新证书,而现在我也需要在 A 上更新证书。

可能的解决方案

我知道一种解决方案是通过 HTTP 建立与 B1 和 B2 的代理连接,但我想知道是否可以做其他事情,原因如下:

  • B1 和 B2 由不同的人拥有,他们愿意共享,但希望尽可能保持他们的配置接近家庭配置,即尽可能避免在 A 上进行更改,
  • A 和 B1/B2 之间建立 HTTPS 连接将允许私有网络中的流量保持加密。

我还想知道流是否可以做这样的事情?

相关内容