Nginx关于反向代理的一些配置

2024-03-12

在使用Nginx做方向代理时,仅做下面的配置,如果在被代理的服务中有访问日志记录的操作,就会发现发现源ip地址全为127.0.0.1,源域名为localhost,全部都是本机。这完全失去了记录日志的意义,严重可能会造成安全隐患无法排查的后果。

原因就在于在进行反向代理没有将请求头中的ip和主机地址等信息一起转发。

location / {
    proxy_pass http://your_backend_server;
}

解决办法

在Nginx配置文件中加入如下配置,这样就可以获取请求主机的真实信息了。

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  1. proxy_set_header Host $host;:此行设置代理请求中的 Host 头,将其值设为 $host 变量的值。Host 头通常包含目标服务器的域名。

  2. proxy_set_header X-Real-IP $remote_addr;:此行设置代理请求中的 X-Real-IP 头,将其值设为客户端的真实 IP 地址,通过 $remote_addr 变量获取。

  3. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:此行设置代理请求中的 X-Forwarded-For 头,将其值设为包含客户端真实 IP 地址的字符串。这是通过 $proxy_add_x_forwarded_for 变量实现的,它会追加当前请求的来源 IP 地址到已有的 X-Forwarded-For 头中。


全局配置

全局配置在http中,对于所有server模块都生效

http {
    # 全局配置
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # 其他 http 配置...

    server {
        listen 80;
        server_name your_domain.com;

        location / {
            proxy_pass http://your_backend_server;
            # 这里不需要再次设置 proxy_set_header,因为它在 http 配置块中已经设置过
            # 其他代理配置...
        }

        # 其他服务器块或配置...
    }
}

局部配置

只对相应配置的server或location模块生效

server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://your_backend_server;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 其他代理配置...
    }

    # 其他服务器块或配置...
}

PREV
JavaScript函数的bind、call、apply
NEXT
详解Javascript数据类型,浅拷贝及深拷贝