Am un server nginx în spatele unui echilibrator de încărcare, serverul nginx transmite cereri către o varietate de servicii, dar în acest caz un container docker care rulează apache. Echilibratorul de încărcare setează corect un X-Forwarded-For, dar în momentul în care ajunge la containerul docker, X-Forwarded-For a fost setat la IP-ul LB.
Am asta în configurația nginx:
/etc/nginx/conf.d/real_ip.conf
set_real_ip_from {{LB IP}};
real_ip_header X-Real-IP;
real_ip_recursive on;
și acesta este virtualhost:
Server {
asculta 443 ssl;
asculta [::]:443 ssl;
nume_server *.domeniu domeniu;
includ /etc/nginx/snippets/domain_ssl.conf;
add_header X-Nginx-Debug „bună”;
proxy_pass_request_headers activat;
Locație / {
proxy_pass_request_headers activat;
proxy_pass http://container-php;
proxy_http_versiunea 1.1;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $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 „Bună lume - $http_x_forwarded_for”;
proxy_set_header X-Forwarded-Proto $schema;
}
}
Dar ceea ce primesc din container este:
matrice(19) {
["Conexiune"] =>
șir (7) „upgrade”
[„Gazdă”] =>
șir (19) „domeniu”
["X-Forwarded-For"] =>
șir (12) „{{LB IP}}”
["X-Header-Test"] =>
string(13) „Bună lume -”
["X-Forwarded-Proto"] =>
șir (5) „https”
["cache-control"] =>
șir (9) „max-age=0”
["sec-ch-ua"] =>
string(64) "" Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97""
["sec-ch-ua-mobile"] =>
șir (2) „?0”
["sec-ch-ua-platform"] =>
șir (9) „„Windows””
["upgrade-insecure-requests"] =>
șir (1) „1”
["user-agent"] =>
string(114) „Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ca Gecko) Chrome/97.0.4692.71 Safari/537.36”
["accept"] =>
string(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"] =>
șir (4) „niciunul”
["sec-fetch-mode"] =>
șir (8) „navigați”
["sec-fetch-user"] =>
șir (2) „?1”
["sec-fetch-dest"] =>
șir (8) „document”
["accept-encoding"] =>
șir (17) „gzip, deflate, br”
["accept-language"] =>
string(26) „en-GB,en-US;q=0.9,en;q=0.8”
}
În special, X-Real-IP, X-Fowarded-For nu par să fie setate, nici remote_addr. Fișierele servite direct de la nginx au x-forwarded-for setat corect, astfel încât LB trimite în jos antetul din dreapta.
Am ratat vreun pas?