Назад | Перейти на главную страницу

Обратный прокси-сервер Nginx в контейнере докеров - зарегистрирован неправильный IP-адрес

Я запускаю Nginx в контейнере Docker в качестве обратного прокси, используя конфигурацию ниже. Он в основном перенаправляет запрос в другой контейнер докеров, работающий на том же компьютере.

Проблема

Проблема в том, что вывод в журнале доступа указывает неправильный IP-адрес клиента, в частности, я получаю IP-адрес хоста Docker. 172.17.0.1:

172.17.0.1 - - [24/May/2016:19:50:18 +0000] "GET /admin/ HTTP/1.1" 200 19243 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0" "-"

Я пытался последовать совету от этот сообщение о set_real_ip_from директива, но безуспешно.

Конфигурация

server {
    listen       8000 ssl;
    server_name  example.com;

    access_log  /var/log/nginx/host.access.log  main;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.key;

    set_real_ip_from 172.17.0.1;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;

    proxy_set_header    Host $host:$server_port;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto $scheme;

    location / {
        proxy_pass  http://172.17.0.1:8100/;
    }
}

Что мне здесь не хватает?


Редактировать:

Я только что понял, что у других людей похожая проблема Вот и Вот но, к сожалению, решения нет.

Вам нужно установить X-Forwarded-For заголовок (не X-Real-IP, это даже менее стандартно) на машине, выполняющей проксирование, и вам нужно сообщить всему, что получает запрос, чтобы доверять тому, что заголовок XFF является законным, потому что он исходит с известного IP. Конфигурация, которую вы указали в своем вопросе, предназначена только для одной машины, но у нее есть конфигурация, которая вам нужна для обоих концов.