Reputation: 241
How to get client's ip behind upstream in nginx?
Now I use next configs:
# upstream listener
upstream ts {
server localhost:841 weight=10 max_fails=3 fail_timeout=10s;
server 10.1.3.209:8080 backup;
}
# server listener
server {
listen 80;
server_name 10.9.24.45;
location / {
proxy_pass http://ts;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# app listener
server {
listen 841;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/access_ts.log;
error_log /var/log/nginx/error_ts.log;
client_max_body_size 16M;
set $www /www;
set $root $www/apps/ts/ROOT;
include /etc/nginx/sites-available/locations;
location / {
proxy_pass http://localhost:840;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
include /etc/nginx/sites-available/location-config;
}
}
In my java app I use X-Real_IP header to get client's ip and all were fine, but after I start use another config with upstream I see only 127.0.0.0. Think this correct, but I need to get a real ip for my app.
How can I get a real ip behind nginx upstream?
I see some answers like proxy_set_header realip $remote_addr, but what can I do without my java app change.
Upvotes: 0
Views: 1657
Reputation: 2129
i had the same issue, the problem is the header you forward change
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Into:
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
Upvotes: 1