如何配置 Nginx Stream RealIP 传递并隐藏真实域名
在现代的网络架构中,使用 Nginx 作为反向代理服务器是非常常见的。为了增强安全性并隐藏真实的域名,我们可以配置 Nginx 的 real_ip 模块来传递客户端的真实 IP 地址,并通过 SSL/TLS 加密来保护数据传输。本文将详细介绍如何配置 Nginx 来实现这一目标。
stream部分配置概述
stream {
# 这里就是 SNI 识别,将域名映射成一个配置名
map $ssl_preread_server_name $backend_name {
domain1.example.com 127.0.0.1:8888;
#这个服务本机提供
domain2.example.com 127.0.0.1:8890;
default naive;
}
# 监听 443 并开启 ssl_preread
server {
listen 443 reuseport;
# listen [::]:443 reuseport;
proxy_pass $backend_name;
proxy_protocol on;# send ip info to http server
ssl_preread on;
}
# 这里的SNI不需要自己处理,之间转发给8889端口上的服务处理,,相当于把 443端口的服务,转发到8889服务
server {
listen 8888 proxy_protocol;
proxy_pass 127.0.0.1:8889;
}
}
##配置本机服务,终结ssl,并且使用用户的真实ip
http {
set_real_ip_from 127.0.0.1/32; # 前端 Nginx 的 IP 范围
real_ip_header proxy_protocol;
server {
listen 8890 ssl http2 proxy_protocol;
listen [::]:8890 ssl http2 proxy_protocol;
server_name domain2.example.com;
#改成你的ssl证书路径
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
# 假设真实服务在8200端口
proxy_pass http://localhost:8200;
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;
}
}
}
##总结 通过以上配置,我们可以实现以下目标:
- 使用 ssl_preread 和 proxy_protocol 在 HTTPS 连接中传递客户端的真实 IP 地址。
- 配置 real_ip 模块以正确识别客户端的真实 IP 地址。
- 使用 SSL/TLS 加密来保护数据传输,并隐藏真实的域名。
- 通过这些步骤,您可以确保 Nginx 能够安全地传递客户端的真实 IP 地址,并隐藏真实的域名,从而提高系统的安全性和隐私保护。