Tôi có ngăn xếp Docker Swarm với nginx làm proxy ngược được thiết lập trên OVH vps. Tôi đã cố gắng sử dụng các lệnh cho phép/từ chối tại vị trí, nhưng nếu tôi đặt từ chối tất cả; nó sẽ không hoạt động ngay cả đối với ip được thêm bằng chỉ thị cho phép. Sau khi xem nhật ký truy cập, tôi phát hiện ra rằng tất cả các yêu cầu được cho là đến từ IP 10.0.0.2. Bây giờ tôi đã cố gắng lấy IP thực trước tiên để ít nhất được hiển thị trong nhật ký, nhưng không gặp may.
Có nginx.conf của tôi:
sự kiện{}
http {
bản đồ $http_upgrade $connection_upgrade {
nâng cấp mặc định;
'' đóng lại;
}
thông tin error_log /dev/stdout;
log_format json_combined thoát = json
'{'
'"thời gian":"$time_local",'
'"httpRequest":{'
'"requestMethod":"$request_method",'
'"requestUrl":"$scheme://$host$request_uri",'
'"requestSize":$request_length,'
'"trạng thái":"$trạng thái",'
'"responseSize":$bytes_sent,'
'"userAgent":"$http_user_agent",'
'"remoteIp":"$remote_addr",'
'"serverIp":"$server_addr",'
'"người giới thiệu":"$http_referer",'
'"độ trễ":"${request_time}s",'
'"giao thức":"$server_protocol"'
'}'
'}';
trình phân giải 127.0.0.11 hợp lệ=30 giây;
bao gồm /etc/nginx/mime.types;
bao gồm /etc/nginx/sites-enabled/*.*;
}
proxy.conf:
set_real_ip_từ 10.0.0.0/8;
real_ip_header X-Forwarded-For;
real_ip_recursive bật;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Máy chủ $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối $connection_upgrade;
proxy_set_header X-NginX-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_http_version 1.1;
proxy_read_timeout 20d;
tắt proxy_buffering;
tắt proxy_request_buffering;
bật proxy_intercept_errors;
bật http2_push_preload;
và vị trí của tôi:
vị trí /api/ {
cho phép XXX.XX.XX.X;
Phủ nhận tất cả;
bao gồm /etc/nginx/proxy-options/proxy.conf;
đặt dịch vụ ocelot $ ocelot;
proxy_pass http://$ocelot$uri$is_args$args;
tắt proxy_ssl_session_reuse;
proxy_redirect tắt;
client_max_body_size 5M;
}
Tôi có thể làm gì để nginx ghi lại IP thực của người yêu cầu và nếu có thể, hãy sử dụng IP để so sánh với lệnh cho phép?