![nginx:server_name 和 server_addr 错误,其前面有反向代理](https://linux22.com/image/540091/nginx%EF%BC%9Aserver_name%20%E5%92%8C%20server_addr%20%E9%94%99%E8%AF%AF%EF%BC%8C%E5%85%B6%E5%89%8D%E9%9D%A2%E6%9C%89%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.png)
我在 nginx 前面有 stunnel 来处理 ssl。 (我知道 nginx 可以处理 ssl,但我正在迁移 nginx,这是必要的步骤。)
Stunnel 和 nginx 在同一个盒子上运行。
如果 nginx 前面没有 stunnel,nginx 会分别将 server_addr 和 server_name 作为盒子的公共 IP 和我正在获取的 url 的域。
现在有了 stunnel,nginx 认为 server_addr 和 server_name 分别是 127.0.0.1 和 localhost。这把事情搞砸了。
我怎样才能让 nginx 获取(或 stunnel 发送)正确的 server_addr 和 server_name?
答案1
但是,由于 Stunnel 是一个代理,不了解 HTTP,因此客户端的 IP 地址丢失了,这有点烦人。
尝试 ngx_http_realip_module 和X-Forwarded-For
支持 Stunnel:
set_real_ip_from 192.168.2.1;
real_ip_header X-Forwarded-For;