- Исходные данные
Фронт:
на него приходят запросы от клиентов, он передает запросы на бекенд.
ip-адрес, с которого идет проксирование на бекенд: 192.168.1.3
Бек:
обслуживает запросы и отдает их фронту
ip-адрес: 192.168.4.6
Если дополнительно не подсуетиться, то в логах бекенда вы увидите не реальный ip клиента, а ip фронта (в нашем случае это 192.168.1.3). Путем несложных манипуляций мы это исправим.
- Фронт
для каждого проксируемого сайта, делаем такой конфиг (в примере также есть переадресация с http на https):server { listen 80; server_name www.server.ru; rewrite ^/(.*) https://www.server.ru/$1 permanent; } server { listen 443 ssl http2; server_name www.server.ru; access_log off; ssl_certificate /etc/ssl/private/server.ru/fullchain.cer; ssl_certificate_key /etc/ssl/private/server.ru/server.ru.key; location / { proxy_pass https://192.168.4.6:443; include proxy_params; } }
В файле proxy_params должны быть как минимум эти строки:proxy_set_header Host $http_host; 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;
- Бек
Если у вас FreeBSD, то nginx должен быть собран с поддержкой модуля http_realip:[x] HTTP_REALIP Enable http_realip module
В конфигурацию каждого сайта (server), который проксируется с фронта, необходимо добавить две строчки (можно и через include):set_real_ip_from 192.168.1.3; real_ip_header X-Real-IP;
первая строка указывает с какого ip идет проксирование, заголовок с реальным ip будет писаться только для запросов с заданного в этой строке ip. Если записать только вторую строчку, то никакой подмены ip не произойдет.
Статья опубликована: 2021-02-24 13:41:59
Последние правки: 2021-02-24 14:43:25
Проксируем запросы к сайтам через nginx на другой nginx. Передаем бекенду реальный ip клиента, для записи в лог.