За обратным прокси-сервером (reverse proxy server) пользовательский IP-адрес часто является IP-адресом самого обратного прокси-сервера.
Но по понятным причинам важно иметь доступ к реальному IP-адресу пользователя.
Конфигурация обратного прокси Nginx
Разумеется, http_realip_module должен быть установлен (—with-http_realip_module)!
Используйте эту команду для проверки:
~$ 2>&1 nginx -V | tr -- - '\n' | grep http_realip_module http_realip_module
Нам нужно указать обратному прокси-серверу, чтобы он передавал информацию на внутренний сервер nginx.
Мы можем добавить эти строки в качестве глобальной конфигурации или для каждого оператора location.
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 $proxy_x_forwarded_proto;
Конфигурация Nginx за обратным прокси-сервером
Мы можем добавить собственный формат журнала и использовать его вместе с другими.
http { # ... ## # Logging Settings ## log_format specialLog '$remote_addr forwarded for $http_x_real_ip - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access-special.log specialLog; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ... }
Или мы можем переопределить формат журнала по умолчанию.
http { # ... ## # Logging Settings ## log_format combined '$http_x_real_ip - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log combined; error_log /var/log/nginx/error.log; # ... }
В некоторых случаях вам нужно будет добавить эту конфигурацию:
set_real_ip_from x.x.x.x/x; # Ip / сеть обратного прокси (или ip, полученный в REMOTE_ADDR)
real_ip_header X-Forwarded-For;