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?