在一台服务器上使用上游时,如何获取真实的客户端IP?

时间:2019-01-18 14:54:25

标签: nginx

我有一个运行nginx的vps,使用ngx_stream_ssl_preread_module使SSL和Non-SSL协议在同一端口上工作。 当我检查access.log时,发现很多行都以127.0.0.1开头。显然,这不是真正的客户端IP。

我试图修改我的nginx.conf,例如proxy_set_header,real_ip_header,set_real_ip_from 127.0.0.1等,它们没有效果。

这是我在nginx.conf中的原始流配置。

stream {
    server {
    listen 443;
    ssl_preread on;
        proxy_pass $upstream;
    }

    map $ssl_preread_protocol $upstream {
    default shadowsocks;
    "TLSv1.1" https;
    "TLSv1.2" https;
    "TLSv1.3" https;
    }

    upstream shadowsocks {
        server 127.0.0.1:7890;
    }

    upstream https {
        server 127.0.0.1:8888;
    }
}

1 个答案:

答案 0 :(得分:0)

我会尝试如下设置代理标头:

server {
    listen 443 ssl default_server;
    ssl_preread on;

    proxy_redirect off;

    location / {
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-Proto https;
        proxy_set_header  X-Forwarded-For $remote_addr;
        proxy_set_header  X-Forwarded-Host $remote_addr;
        proxy_pass $upstream;
    }
}