我想知道是否有人可以解释一下我遇到的问题,
目前,我正在测试 TLS 传递到我的 zimbra 服务器,因为 SSL 必须位于 zimbra 服务器和另一个也有 SSL 的 wordpress 站点中
设置会这样
互联网--------NGINX 代理-------ZIMBRA 和 ------WORDPRESS 网站
我已成功将 nginx 代理配置为 TLS 直通,但我检查了日志,发现似乎没有将真实 IP 传递给 zimbra 或 wordpress
但无法弄清楚,因为它不允许我发送代理标头,因为我使用的是 TLS 直通
root@bunker:~# cat /etc/nginx/modules-enabled/passtru.conf
stream {
map $ssl_preread_server_name $name {
wordpress.domain.com wordpress;
mail.domain.com zimbra;
default https_default_backend;
}
upstream wordpress {
server 192.168.7.35:443;
}
upstream zimbra {
server 192.168.7.245:443;
}
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received"
"$upstream_connect_time"';
access_log /var/log/nginx/access.log basic;
error_log /var/log/nginx/error.log;
server {
listen 443;
proxy_pass $name;
proxy_next_upstream on;
ssl_preread on;
}
}
答案1
当您通过 TLS 时,您无法通过 IP 地址。
使用 TLS 直通时,TCP 连接在 TLS 直通代理处终止。这意味着 TCP 连接位于客户端和代理之间。为了到达目标服务器,代理会打开到实际目标的 TCP 连接。在此连接中,源 IP 地址是代理的 IP 地址。
使用 HTTP,可以在 HTTP 标头字段中添加原始 IP 地址。TLS 没有这样的字段。因此,实际目的地唯一可用的信息是 TCP 连接的源 IP 地址,即代理服务器。
获取 IP 地址的一些选项:
- 删除 TLS 直通代理并为每个服务使用单独的 IP 地址。
- 在代理服务器上终止 TLS 并添加带有原始 IP 地址的 HTTP 标头
- 您可能能够在此 nginx 实例和上游服务器之间使用 PROXY 协议。https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/有与此相关的信息。