假设内网的 IP 是 192.168.1.100
,域名为 internal.example.com
。
前提条件
- 代理服务器:
192.168.1.100
,将其解析为internal.example.com
。 - HAProxy 服务器:负责将请求转发到 Nginx。
- Nginx 服务器:负责处理最终的请求。
步骤 1:配置 /etc/hosts
在客户端或者需要解析 internal.example.com
的机器上,编辑 /etc/hosts
文件,添加如下内容:
这样,当访问 https://internal.example.com
时,会通过 192.168.1.100
传递请求。
步骤 2:配置 HAProxy 服务器
编辑 HAProxy 配置文件 /etc/haproxy/haproxy.cfg
,添加如下内容:
重启 HAProxy 服务以应用新配置:
步骤 3:配置 Nginx 服务器
在 Nginx 服务器上,使用 stream
模块进行反向代理。编辑 Nginx 配置文件,例如 /etc/nginx/nginx.conf
或者专用的流配置文件(如 /etc/nginx/conf.d/stream.conf
):
请务必确认已经启用了 ssl_preread
模块和相关配置。
重启 Nginx 服务以应用新配置:
流程总结
- 访问
https://internal.example.com
:
- 客户端访问
https://internal.example.com
,根据/etc/hosts
将域名解析为192.168.1.100
。
- 代理服务器 (
192.168.1.100
) 转发到 HAProxy:
- 请求通过代理服务器进入 HAProxy。
- HAProxy 处理请求并转发到 Nginx:
- HAProxy 接收请求并将流量转发到 Nginx 的
127.0.0.1:9443
。
- Nginx 获取握手过程中的请求域名并解析:
- Nginx 使用
ssl_preread
获取到 SSL 握手阶段的请求域名。 - 基于获取到的域名,使用
map
将$ssl_preread_server_name
映射为$ssl_proxy_upstream
。 - 如果域名为空,则默认走
127.0.0.1:8443
。
- Nginx 使用阿里云 DNS 解析并转发:
- Nginx 通过阿里云 DNS (
resolver 100.100.2.136 100.100.2.138
) 解析域名。 - 最终请求由
proxy_pass backend
发往解析后的地址。
通过以上步骤,可以确保在访问 https://internal.example.com
时,通过一系列的代理和转发,最终将请求安全地传递到目标地址。