我有一台小型机器作为我网络的入口点,我们称之为 A。我的私人网络上还有两台无法从外部访问的服务器,我们称之为 B1 和 B2。
我们假设 B1 具有私有地址 1.1.1.1,而 B2 具有私有地址 2.2.2.2。
我希望 A 有一个基本的 nginx 配置,代理任何发往 B1 的请求b1.com
,*.b1.com
以及发往b2.com
B2的请求*.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 连接将允许私有网络中的流量保持加密。
我还想知道流是否可以做这样的事情?