
Я искал в serverfault, но не смог найти ответ на этот вопрос. Может быть, я просто не знаю правильного ключевого слова или это концептуальное недопонимание. Любая помощь будет оценена по достоинству!
Ситуация:
- Мои локальные службы работают через обратный прокси-сервер NGINX
- Я используюLAN DNS на маршрутизаторе (Draytek)для разрешения локальных запросов к *.example.com непосредственно на моем локальном сервере (192.168.1.2).
Даже если нет подключения к интернету, домены будут разрешены на локальном сервере и все сервисы будут доступны. Вот почему я использую LAN DNS. Пока все хорошо.
Теперь я хочу разрешить локальным клиентам доступ к определенным сервисам с помощьюМодуль доступа NGINXс:
allow 192.168.1.0/24;
deny all;
Но NGINX видит только публичный IP-адрес маршрутизатора вместо IP-адреса клиента (192.168.1.100), поэтому все запросы отклоняются:
[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"
Мой вопрос:
Как в этом сценарии отличить локальных и удаленных клиентов на NGINX?
решение1
Сначала предположение/условие, которое заключается в проверке того, добавляет ли ваш маршрутизаторX-Forwarded-Forзаголовок или что-то подобное (отслеживает фактический IP-адрес клиента)
Сначала вам следует разрешить клиентский IP-адрес черезngx_http_realip_module
Пример конфигурации, представленный там:
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
set_real_ip_from 2001:0db8::/32;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
При этом IP-адрес, используемый для проверки доступа, должен быть правильным (реальным клиентом).
Одно предостережение заключается в том, что при такой конфигурации попытки добавить маршрутизатор в заголовок X-Forwarded-For невозможны.автоматическис proxy_add_x_forwarded_for, так как IP, добавленный через, будет изменен предыдущей директивой. Этот конкретный случай обсуждалсяпри переполнении стека