База знаний по Open Source
Yandex поиск по всему сайту
Авторизация

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