У меня есть стек Docker Swarm с nginx в качестве обратного прокси-сервера, настроенного на OVH vps. Я пытался использовать директивы разрешения/запрета в местоположении, но если я установил запретить все; это не сработает даже для IP-адресов, добавленных с разрешающей директивой. Посмотрев логи доступа выяснил, что все запросы якобы идут с IP 10.0.0.2. Теперь я попытался сначала получить фактический IP-адрес, чтобы он хотя бы отображался в журналах, но безуспешно.
Вот мой nginx.conf:
События{}
http {
карта $http_upgrade $connection_upgrade {
обновление по умолчанию;
'' близко;
}
error_log /dev/stdout информация;
log_format json_combined escape=json
'{'
'"время":"$time_local",'
'"httpRequest":{'
'"requestMethod":"$request_method",'
'"URL-адрес запроса":"$схема://$host$request_uri",'
'"размер_запроса":$request_length,'
'"статус":"$статус",'
'"responseSize":$bytes_sent,'
'"userAgent":"$http_user_agent",'
'"remoteIp":"$remote_addr",'
'"serverIp":"$server_addr",'
'"реферер":"$http_referer",'
'"задержка":"${request_time} с",'
'"протокол":"$server_protocol"'
'}'
'}';
преобразователь 127.0.0.11 действительный = 30 с;
включить /etc/nginx/mime.types;
включить /etc/nginx/sites-enabled/*.*;
}
прокси.конф:
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
real_ip_recursive на;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Хост $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $ схема;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение $connection_upgrade;
proxy_set_header X-NginX-Proxy true;
proxy_cache_bypass $http_upgrade;
прокси_http_версия 1.1;
proxy_read_timeout 20 дней;
прокси_буферизация выключена;
proxy_request_buffering выключен;
proxy_intercept_errors включен;
http2_push_preload включен;
и мое местоположение:
расположение /API/ {
разрешить XXX.XX.XX.X;
отрицать все;
включить /etc/nginx/proxy-options/proxy.conf;
установить сервис $ocelot ocelot;
proxy_pass http://$ocelot$uri$is_args$args;
proxy_ssl_session_reuse выключено;
прокси_перенаправление выключено;
client_max_body_size 5M;
}
Что я могу сделать, чтобы nginx регистрировал фактический IP-адрес запрашивающей стороны и, если возможно, использовал IP-адрес для сравнения с разрешающей директивой?