Portál AbcLinuxu, 20. května 2024 22:24


Dotaz: nginx proxy_pass vs. redirect

23.2.2021 20:16 gree
nginx proxy_pass vs. redirect
Přečteno: 350×
Odpovědět | Admin
Zdravim,

uz se par hodin trapim s nasledujicim. Mam server A s webem pro https://firma.com/, kde je i stranka produktu https://firma.com/produkt/. Pak mam server B, na ktery mam namirenou domenu produkt.com, a ten chci pouzit jen jako reverzni proxy pro dotazy jako http://produkt.com, http://www.produkt.com, ktery maji smerovat prave na stranku https://firma.com/produkt/.

Config nginxu na serveru B je:
server {
        listen 80;
        listen [::]:80;

        server_name produkt.com www.produkt.com;

        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;

        large_client_header_buffers 4 32k;
        client_max_body_size 0;

        location / {
#                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 $scheme;

                proxy_pass              https://firma.com/produkt/;
        }
}
I kdyz mam ale proxy_redirect off;, tak se proxy_pass chova jako 301, tj. v browseru se mi URL zmeni na https://firma.com/produkt/, co nechci. Pokud odkomentuju proxy_set_header Host $host; tak se stale proxy_pass chova jako redirect a navic se zacykli s URL https://produkt.com/produkt/produkt/produkt/produkt/produkt/...

Poznamka: Server B je container bezici v hostu, kde bezi jeste jeden nginx, ktery s proxy_pass funguje jak ma (zadnej redirect) a navic transparentne pridava SSL (80->443).

Diky za rady.

Řešení dotazu:


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

Odpovědi

23.2.2021 22:33 X
Rozbalit Rozbalit vše Re: nginx proxy_pass vs. redirect
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle by mohlo stacit:
server {
    listen 80;
    server_name produkt.com www.produkt.com;

    location / {
        proxy_pass https://firma.com/produkt;
        proxy_redirect default;
    }
}
Řešení 1× (gree (tazatel))
23.2.2021 22:51 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: nginx proxy_pass vs. redirect
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nepresmeruvava ta z proxy na firma.com samotna stranka firma.com? Potom potrebujes v nginx prepisovat hlavicky z backendu. Skus do location / pridat:
proxy_redirect default;
24.2.2021 10:10 gree
Rozbalit Rozbalit vše Re: nginx proxy_pass vs. redirect
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, diky moc obema za odpovedi.

Kdyz dam proxy_redirect default; za proxy_pass, tak se stale redirectuje a navic se to zase zacykli (a to i bez proxy_set_header Host $host;).

Ohledne toho, ze by me presouvala primo firma.com jsem premyslel, ale to jsem vedel, ze se nedeje (bezi tam jinej webserver, takze jsem videl v hlavickach, ze za to muze nejakej nginx). Ale navedlo me to na dukladnejsi check, jestli se redirect deje opravdu na serveru B a nebo na nginxu, co bezi na hostu, ve kterym bezi server B jako kontejner. A svete div se, deje se to na tom hostu a ne v tom containeru (co mi total nedava smysl, protoze "v ostatnich pripadech", ktery jsem kontroloval, se tam proxy_pass deje spravne).

Kazdopadne diky moc na navedeni, jdu dukladneji zkoumat, co se deje na tom hostu.
1.3.2021 17:13 gree
Rozbalit Rozbalit vše Re: nginx proxy_pass vs. redirect
Ok, takze problem a reseni byly nasledujici:

Zacykleni redirectu se nakonec nedelo ani na jednom, ani na druhem nginxu (host a server B), ale mezi nimi v tandemu mezi http->https->http :)

Takze bylo potreba "jen" spravne v proxy_pass v kazde z konfiguraci nginxu pouzit sprave http (host->server B) a https (server B->firma.com).

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.