За обратным прокси-сервером (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;