Tôi có một máy chủ nginx phía sau bộ cân bằng tải, máy chủ nginx chuyển các yêu cầu tới nhiều dịch vụ khác nhau, nhưng trong trường hợp này là một bộ chứa docker chạy apache. Bộ cân bằng tải đặt chính xác X-Forwarded-For, nhưng vào thời điểm nó đến bộ chứa docker, X-Forwarded-For đã được đặt thành IP LB.
Tôi có cái này trong cấu hình nginx:
/etc/nginx/conf.d/real_ip.conf
set_real_ip_from {{LB IP}};
real_ip_header X-Real-IP;
real_ip_recursive bật;
và đây là máy chủ ảo:
người phục vụ {
nghe 443 ssl;
nghe [::]:443 ssl;
server_name *.domain miền;
bao gồm /etc/nginx/snippets/domain_ssl.conf;
add_header X-Nginx-Gỡ lỗi "xin chào";
bật proxy_pass_request_headers;
địa điểm / {
bật proxy_pass_request_headers;
proxy_pass http://container-php;
proxy_http_version 1.1;
proxy_set_header Nâng cấp $http_upgrade;
proxy_set_header Kết nối "nâng cấp";
proxy_set_header Máy chủ $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Addr $remote_addr;
proxy_set_header X-Real-IP $http_x_real_ip;
proxy_set_header X-Header-Test "Xin chào thế giới - $http_x_forwarded_for";
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Nhưng những gì tôi nhận được từ container là:
mảng(19) {
["Kết nối"]=>
chuỗi (7) "nâng cấp"
["Máy chủ"]=>
chuỗi (19) "miền"
["X-Forwarded-For"]=>
chuỗi (12) "{{LB IP}}"
["X-Header-Test"]=>
chuỗi (13) "Xin chào thế giới -"
["X-Forwarded-Proto"]=>
chuỗi (5) "https"
["kiểm soát bộ đệm"]=>
chuỗi (9) "tuổi tối đa = 0"
["sec-ch-ua"]=>
string(64) "" Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97""
["sec-ch-ua-mobile"]=>
chuỗi (2) "?0"
["sec-ch-ua-nền tảng"]=>
chuỗi (9) ""Windows""
["yêu cầu nâng cấp-không an toàn"]=>
chuỗi (1) "1"
["tác nhân người dùng"]=>
chuỗi (114) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, như Gecko) Chrome/97.0.4692.71 Safari/537.36"
["chấp nhận"]=>
chuỗi(135) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v =b3;q=0,9"
["sec-fetch-site"]=>
chuỗi (4) "không"
["sec-fetch-mode"]=>
chuỗi (8) "điều hướng"
["sec-fetch-user"]=>
chuỗi (2) "?1"
["sec-fetch-dest"]=>
chuỗi (8) "tài liệu"
["chấp nhận mã hóa"]=>
chuỗi (17) "gzip, xì hơi, br"
["chấp nhận ngôn ngữ"]=>
chuỗi(26) "en-GB,en-US;q=0.9,en;q=0.8"
}
Đáng chú ý là X-Real-IP, X-Fowarded-For dường như không được đặt, remote_addr cũng vậy. Các tệp được cung cấp trực tiếp từ nginx đã được đặt x-forwarded-for đúng cách, vì vậy LB đang gửi tiêu đề bên phải xuống.
Tôi đã bỏ lỡ một bước?