У меня есть API, работающий на среднем стеке и обслуживаемый с использованием PM2. Он предоставляет конечную точку HTTP в http://89.89.89.89:8080 (пример IP) - я могу получить к нему доступ напрямую через свой браузер.
Я установил Nginx и использую следующую конфигурацию для перенаправления запросов к API на том же сервере.
server {
listen 8081;
server_name example.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_pass http://127.0.0.1:8080;
}
}
Вышеуказанное работает, и я могу получить доступ к API по адресу http://89.89.89.89:8081 (Порт Nginx), однако запросы к цели исходят от 127.0.0.1. Я хотел бы переслать реальный IP-адрес пользователя PM2. Я искал и пробовал несколько решений, но не могу заставить это работать.
Любая помощь или указатели в правильном направлении приветствуются.
вам нужен nginx с модулем --with-http_realip_module
или вы сможете обойтись без него.
Проверка наличия модуля выполнить nginx -v
.
Без модуля вы должны указать в формате журнала конфигурации следующее. ПРИМЕР:
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
access_log /var/log/nginx/access.log main;
real_ip_header X-Forwarded-For;
После этого перезапустите nginx и проверьте логи.
Если модуль установлен, вам необходимо соответствующим образом изменить конфигурацию
# Directives for setting real_ip/XFF IP address in log files
set_real_ip_from 192.168.101.10; #IP address of master LB
real_ip_header X-Forwarded-For;
Модуль реального ip используется для изменения исходного IP-адреса клиента на значение в заголовке. мы хотели установить реальный IP-адрес для трафика, поступающего с сервера с IP-адресом 192.168.101.10.
Опять же, после внесения изменений сервис nginx необходимо перезапустить.