Portál AbcLinuxu, 5. května 2025 01:53

Dotaz: nginx a x-forwarded-proto

3.4.2018 00:23 krishna23
nginx a x-forwarded-proto
Přečteno: 452×
Odpovědět | Admin
Ahoj, můžete mi prosím poradit? Zkazilo mi to velikonoce, protože jsem nad tim musel furt přemýšlet.

Migruju z Apache na Nginx a narazil jsem na problém.

Schéma:

Client ---> F5 loadbalancer (který terminuje SSL ) ----> nginx (80) ---> PHP-FPM

Potřebuju nastavit, aby webový server (nginx) přidával do hlaviček http requestů X-Forwarded-Proto https (kvůli symfony framework, který tam běží). Dokumentací nginx už jsem se prodíral, ale dělám asi furt něco špatně, resp. podařilo se mi dosáhnout kýženýho výsledku, když jsem vytvořil následující setup:

Client ---> F5 loadbalancer (který terminuje SSL ) ----> nginx jako proxy (80) ---> nginx jako backend (port 99 třeba) ---> PHP-FPM

Nicméně přijde mi to poněkud neohrabané a nevím, jak ho donutit, aby uvedenou hlavičku přidával bez proxy_pass. V apache (z kterého migruju právě na nginx) to šlo naprosto jednoduše přidáním: RequestHeader set X-Forwarded-Proto "https"

Tady ještě moje konfigurace:
 server {
listen 80;
server_name www-uat2.xyz.cz;
root /app01/wsc/uat2/web;

location /muj/ {
try_files $uri /muj/app.php$is_args$args;
}

location ~ ^/muj/(app|app_dev|config)\.php(/|$) {
proxy_pass http://www-uat2.xyz.cz; 
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param APP_ENV uat2;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_pass 127.0.0.1:9000;
}

access_log /log01/httpd/wsc/uat2/www-uat2-nginx.xyz.cz-access_log;
error_log /log01/httpd/wsc/uat2/www-uat2-nginx.xyz.cz-error_log;


} 
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Max avatar 3.4.2018 01:03 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: nginx a x-forwarded-proto
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já máma na několika místech :
internet -> nginx reverse proxy/load balancer -> 2x IIS
internet -> nginx reverse proxy -> jetty
internet -> nginx reverse proxy -> apache
A všude si vystačím s :
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
Pravdou je, že https mám zakončeno na tom nginx a za ním mám cílovou službu.
Každopádně mám v plánu se nginxu zbavit. Zjistil jsem, že v OSS verzi to je hodně okleštěný a nehodí se jako load balancer.

Každopádně tím tvým nasazením mi připomínáš začátky, které popisují zde :
HAProxy v praxi - zkušenosti z integrace a provozu (Michal Rychlík)
Kde také používali F5 a spoustu věcí za sebou úplně zbytečně a skončili vlastně jen u HAProxy + na cache varnish.
Zdar Max
Měl jsem sen ... :(
Max avatar 3.4.2018 08:03 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: nginx a x-forwarded-proto
Beru zpět, špatně jsem pochopil dotaz, měl jsem jít raději spát.
Zdar Max
Měl jsem sen ... :(
Josef Kufner avatar 3.4.2018 11:24 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: nginx a x-forwarded-proto
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tu hlavičku by měl přidávat loadbalancer. Je to ten jediný, který skutečně ví, odkud a po čem spojení skutečně přišlo.
Hello world ! Segmentation fault (core dumped)
3.4.2018 16:52 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: nginx a x-forwarded-proto
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podle mne proxy_set_header nemá na FastCGI vliv. Zkusil bych spíš
fastcgi_param HTTPS on;
Ale jak už bylo řečeno, správně by to tam měl přidávat loadbalancer, který jediný ví, zda spojení skutečně přišlo po HTTPS.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.