所需场景简化如下:访问80,转发到81,在81端口这里如何能获取到真实的客户端IP?
官方说是通过realip模块就可以,但是我设置了,在81这里的$remote_addr仍然是本机地址127.0.0.1;
我用官方的nginx和openresty都试过,无法直接通过remote_addr获取。

配置部分如下:

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:81/;
    }
}

server {
    listen       81;
server_name  localhost;

location / {
        set_real_ip_from 127.0.0.1;
        real_ip_header    X-Forwarded-For;
        real_ip_recursive on;

    return 200 $remote_addr;
}
}
    7 days later

    应该是return 早于 realip模块执行
    `
    http {
    access_log logs/access.log;

    server {
    listen       80;
    server_name  localhost;
    
    location / {
        proxy_pass http://127.0.0.1:81/;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    }

    }

    server {
        listen       81;
        server_name  localhost;
    
        location / {
    
            set_real_ip_from 127.0.0.1;
            real_ip_header   X-Forwarded-For;
            real_ip_recursive on;
    
            access_by_lua_block {
                ngx.say(ngx.var.remote_addr)
                return ngx.exit(200)
            }
        }
    }

    }

    `

      Write a Reply...