ASP.NET Redirect reverse proxy mellett
2021-04-04T18:47:59+02:00
2021-04-04T22:56:31+02:00
2022-08-12T01:50:31+02:00
Blacky95
Sziasztok!

Az itthoni szerveremen több webszerver is fut, ezeket NGINX reverse proxyval beszerveztem szépen a 80-as port alá.

A problémám az, hogy az ASP.NET webalkalmazásom az IIS (:8085) szerveren, ami az NGINX konfigurációban a /iis1/ alatt van, képtelen megfelelően kitalálni, hogy egy gombnyomáskor hova is kellene ugrania. Tehát pl. amikor egy bejelentkezés után a Login.aspx-nek a MainPage.aspx-re kellene átirányítania, akkor ő azt a szerver/MainPage.aspx-re dobja át, amely értelem szerűen nem található, mert a szerver/iis/MainPage.aspx-re kellene irányítania.

Ugyan ez a probléma közönséges linkeknél fel sem merül, azok simán átirányítanak bárhova, jól.

Ezek a rosszul működő kódok gombnyomáskor:

Response.Redirect("~/MainPage.aspx"); Response.Redirect("/MainPage.aspx"); Response.Redirect("../MainPage.aspx"); Response.Redirect("MainPage.aspx");
Ez pedig a jól működő link:

<a href="MainPage.aspx">Visszalépés</a>
Van-e esetleg arra mód, hogy C# alól hívjak meg olyan kódot, amely képes jól átnavigálni reverse proxy esetén is?
Mutasd a teljes hozzászólást!

  • Némi guglizás után, ha az utolsó variáció sem működik, a "./MainPage.aspx"-nek érdemes még egy esélyt adnod :)

    Feltételezve a 80-as portról, csak sima webszolgáltatásokat hosztolsz a szerveren, ugye? Ha igen, használhatsz ún. wildcard-ot a domain nevedben, párosítva host header routinggal. Szerintem így jobban megjegyezhető címeid lennének, mint:
    torrent.mydomain.com
    downloads.mydomain.com
    stb. Hátránya, hogy ez tényleg csak HTTP alapú dolgokkal fog működni. Én is szeretnék valami ilyesmit elérni, csak nekem ott van még az RDP és az FTP is, így nálam maradnak a jól bevált portok :(
    Mutasd a teljes hozzászólást!
  • Nekem is van még RDP és FTP, csak az jelen esetben nem lényeges. De a 80-as porton igen, csak HTTP megy.

    Alapvetően nem vagyok webfejlesztő (sőt, munkám alapján fejlesztő sem), csak kaptam egy projektet, amelyhez gondoltam, hogy ha már tudok programozni, akkor nem leírom 15 oldalban, hogy milyen szoftver kellene és magyarázom mind a szakkollégák, mind az IT és beszerzés felé, hogy mi és hogyan, hanem elkészítek egy prototípust/demót, amit be lehet mutatni, hogy "na ilyen legyen". És ott jött elő a probléma, hogy munkahelyi hálózaton a nem bevett portok tiltva vannak. Így a szerveremen a kész teszt weblap 8085-ös porton nem elérhető munkahelyi hálón. Erre volt megoldás a reverse proxy, de itt meg ebbe ütköztem.

    Amúgy találtam időközben egy megoldást, amely működhet, de nem akarom ilyen gyorsan lezárni a témát, mert szerintem ez eléggé khm... proli megoldás.

    C# kódba ezt a sort tettem a Response.Redirect("MainPage.aspx"); helyére:

    ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", "window.location.href = 'MainPage.aspx';", true);
    Úgy gondolom, hogy azért kell kliens oldalon megoldani problémát, mert a valós URL csak kliens oldalon látszik. Az IIS meg úgy akarja feloldani az URL-t, hogy a szerver gyökerére utal vissza. Ami nem rossz logika, de szegényke nem tudja, hogy reverse proxy mögött van.

    Ezt a wildcardot igyekszem kipróbálni.
    Mutasd a teljes hozzászólást!
abcd