Як зафіксувати вихідне значення $ remote_addr при використанні Real-IP


9

У моєму середовищі є запити користувачів, що проходять через низку систем:

[Клієнт] -> [ELB] ---> [nginx] -> [веб]

(ELB = AWS пружний балансир навантаження)

Завдяки цій відповіді я маю nginx визначення та передачу правильної IP-адреси клієнта на сервери верхнього потоку (веб) із заголовками X-Forwarded-Forта X-Real_IP. Відповідна конфігурація nginx:

    real_ip_header      X-Forwarded-For;
    set_real_ip_from        10.0.0.0/8;
    real_ip_recursive   on;
    proxy_set_header X-Real-IP $remote_addr;

Моя проблема полягає в тому, що модуль Real IP в nginx замінює існуючу $remote_addrзмінну з результатом її X-Forwarded-Forобчислень. Це дає мені вихідний IP-клієнт, але я втрачаю IP-адресу системи, яка фактично надіслала запит проксі (тобто ELB).

Взагалі, наявність IP-адреси клієнта для мене важливіше, але я хотів би мати можливість записувати повний ланцюжок запитів, щоб я міг зрозуміти (і налагодити), як протікає трафік. В даний час я можу мати лише nginx, що входить до клієнта IP, його власний IP та IP поточного сервера. Я також хотів би мати можливість записувати IP-код ELB.

Я бачу, X-Istence задав те саме питання у 2013 році, не маючи везіння. Чи змінилося чи покращилось з того часу?

Відповіді:


8

Ви можете отримати оригінальну адресу клієнта з'єднувального ELB у змінній$realip_remote_addr , але майте на увазі, що ця змінна була додана лише у nginx 1.9.7, тому вам потрібно буде запускати зовсім недавню версію nginx.


Дякую @Michael Hampton ♦! Я повертався, щоб відповісти на власне запитання, оскільки, переслідуючи альтернативну стратегію, я нарешті натрапив на неї $realip_remote_addr. Це прекрасно працює. Насправді намагався змусити proxy_protocol працювати, і натрапив на патчі nginx для 1.9.7
michaelg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.