使用 nginx 作为反向代理时在 Apache 上获取正确的 SERVER_ADDR

使用 nginx 作为反向代理时在 Apache 上获取正确的 SERVER_ADDR

(请参阅下面的编辑)

我使用 nginx 将请求转发到 Apache 2.4,SERVER_ADDR 的值是 127.0.0.1。正确的 IP 仅在 HTTP_X_SERVER_ADDRESS 上可用。

我已经安装了武装部队模块,但它只修复了 REMOTE_ADDR 值(之前也是 127.0.0.1,现在是正确的远程 IP)。

有没有办法在 SERVER_ADDR 上获取正确的服务器 IP?

我在 nginx.conf 上有以下配置:

proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Server-Address $server_addr;
proxy_set_header Host $host;

编辑:我刚刚意识到我可以用proxy_pass [my-server-ip]代替proxy_pass 127.0.0.1,这样做有什么缺点吗?

答案1

对于同一主机和单个公共 IP 地址(例如 192.168.99.1)中的 nginx-to-apache,有几种可用选项:

  1. Nginx 监听 192.168.99.1 的 80 端口,Apache 监听 192.168.99.1 除 80 之外的其他端口(例如 8080 端口)

  2. Nginx 监听 192.168.99.1 的 80 端口,Apache 监听 127.0.0.1 的 80 端口(同一端口)

选项 2 的缺点是你之前的问题。而对于选项 1,你不应该有任何主要的缺点,除了一些防火墙规则以确保客户端不直接连接到 Apache 端口。

相关内容