Задать вопрос
Screatch
@Screatch
Ruby On Rails front-end developer

Nginx некорректно проксирует x-real-ip?

Есть nginx конфиг который выглядит приблизительно следующим образом.



Проблема в том что nginx почему то не проксирует real-ip на бекенд. А точнее проксирует, но вместо real ip — ip сервера.



server {<br>
<br>
  listen       80;<br>
<br>
  proxy_set_header X-Real-IP $remote_addr;<br>
  proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;<br>
  proxy_set_header X-NginX-Proxy true;<br>
  proxy_redirect off;<br>
<br>
  location / {<br>
<br>
    if ($request_uri ~* "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)" ) {<br>
      set  $shard  $1;<br>
      set  $hash   $2;<br>
    }<br>
<br>
    if ($shard = '5a5dc35b') {<br>
      proxy_pass        http://176.9.22.27/code/$2;<br>
    }<br>
  }<br>
}<br>




Вот то что в итоге приходит на бэкенд (Node.JS)



{ 'x-real-ip': '188.40.116.158',<br>
  'x-forwarded-for': '80.235.55.211, 188.40.116.158',<br>
  host: '176.9.22.27',<br>
  'x-nginx-proxy': 'true',<br>
  connection: 'close',<br>
  'cache-control': 'max-age=0',<br>
  'user-agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11',<br>
  accept: '*/*',<br>
  'accept-encoding': 'gzip,deflate,sdch',<br>
  'accept-language': 'en-US,en;q=0.8',<br>
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' }<br>




И так, позвольте я немного поясню.

80.235.55.211 — мой настоящий ip, именно его нужно проксировать на бэкенд

188.40.116.158 — ip сервера, это тот ip который подставляется вместо ip выше.

176.9.22.27 — ip куда проксируется запрос.



Подскажите пожалуйста, что я делаю не так и куда мне копать?
  • Вопрос задан
  • 43627 просмотров
Подписаться 8 Оценить Комментировать
Решения вопроса 1
Описание переменной:
$proxy_add_x_forwarded_for
поле заголовка запроса клиента “X-Forwarded-For” и добавленная к нему через запятую переменная $remote_addr. Если же поля “X-Forwarded-For” в заголовке запроса клиента нет, то переменная $proxy_add_x_forwarded_for равна переменной $remote_addr.

Тут налицо двойное проксирование. Покажите полный конфиг nginx.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@zubovd
nginx.org/ru/docs/http/ngx_http_realip_module.html в помощь
я добавил на бэкенде:
set_real_ip_from 10.0.3.1; // адрес проксирующего хоста
real_ip_header X-Real-IP;
real_ip_recursive on;
Ответ написан
Комментировать
charliez
@charliez
а попробуйте директивы proxy_set_header прописать непосредственно рядом с proxy_pass
Ответ написан
script88
@script88
А вы случайно mod_rpaf не пропустили на бекенде?!
Ответ написан
@Kaliha
Системный администратор хостинга
Помогите плиз (не хватает кармы для нового вопроса).
Есть nginx + apache + rpaf. При обращении к nginx пишет ип локальный. При обращении напрямую к apachе по 8080 порту — пишет ип пользователя. Конфиг типовой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы