Неправильный IP с lighttpd инвертирует прокси

Я использую прокси реверса lighttpd для обслуживания django с gunicorn. Теперь эта конфигурация работала:

proxy.server = ("" => ( "" => (
    "host" => "127.0.0.1",
    "port" => 8000,
)))

Теперь я переместил gunicorn в контейнер и использование:

proxy.server = ("" => ( "" => (
    "host" => "192.168.1.2",
    "port" => 8000,
)))

Теперь каждый запрос имеет IP 192.168.1.1 как замечено gunicorn. Я понял бы, если обратный прокси запутывает реальный IP, но почему он работал с localhost затем?

для обоих я добираюсь

X-Forwarded-For: client-ip
X-Host: the.domain
X-Forwarded-Proto: http

где клиентский IP является общедоступным IP пространством.

запросы прибывают из

хост:

nc: connect to 127.0.0.1 8000 from localhost (127.0.0.1) 44953 [44953]

контейнер:

nc: connect to 192.168.1.2 8000 from host (192.168.1.1) 60027 [60027]

сам контейнер имеет IP 192.168.1.2, мост хоста имеет 192.168.1.1 и маршруты в контейнере:

default via 192.168.1.1 dev eth0 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.2

хост имеет:

192.168.1.0/24 dev bridge  proto kernel  scope link  src 192.168.1.1

Править: X-Forwarded-For был тем же для обоих запросов. (Протестированный с nc -vlp 8000).

2
задан 16 September 2015 в 14:50
1 ответ

Моя ставка? lighttpd добавляет заголовок X-Forwarded-For , а в Django есть что-то жестко запрограммированное, чтобы знать, что 127.0.0.1 вряд ли будет настоящим удаленным IP-адресом, если этот заголовок присутствует.

Вы должны убедиться, что присутствует заголовок X-Forwarded-For , а затем заставить Django использовать его в качестве удаленного адреса (похоже, способ сделать это здесь ).

4
ответ дан 3 December 2019 в 10:02

Теги

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