Reverzní proxy pro směrování nedefinovaných domén

martyd420

  • ***
  • 195
  • K U B U N T U
    • Zobrazit profil
    • E-mail
Ahoj,
prosím o radu s nastavením serveru :)

Mám jeden fyzický server (Debian 11), jednu IP v4 adresu a chtěl bych provozovat weby (Nginx, ve VM Apache) jak na tom fyzickém serveru, tak ve dvou virtuálkách (KVM, QEMU, libvirt), které na tom serveru běží za použití jen té jedné IP v4 adresy.
Našel jsem možnost nastavit si apache/nginx jako reverse proxy - tzn. na fyzickém serveru běží doména prvni.cz a ve virtualkách druha.cz, treti.cz a ctvrta.cz.
Když nastavím reverse proxy drua.cz na lokílní ip VM, funguje to, pro další doménu taky, ...

Otázka zní - lze to udělat naopak? Tzn. řeknu, že na fyzickém serveru běží prvni.cz a vše ostatní půjde na jednu z těch virtuálek aniž bych musel explicitně uvádět jednotlivé domény? Ideálně s možností ještě nějaké domény definovat na druhou virtuálku, ale prostě aby vše nedefinované šlo na jednu danou lokální IP?
« Poslední změna: 26. 04. 2023, 11:32:52 od Petr Krčmář »
T_PAAMAYIM_NEKUDOTAYIM  |  Nemám rád IPv6 influencery :P


alex6bbc

  • *****
  • 1 486
    • Zobrazit profil
    • E-mail
hledal bych reverse_proxy a server_name wildcard.

treba to naslo priklad: server_name ~^.*$
nezkousel jsem, ale tohle bych zkusil.

Ne, nelze. Reverzni proxy musi znat, kterou domenu ma poslat na jakou ip, takze pokud je konkretni domena na jine ip nez "nedefinovane domeny ip" (obvykle nejaky default), tak je nutno tu domenu v proxy definovat.

takze:
 dns prvni.cz -> fyzicka IP apache, virtualhost prvni.cz
 proxy, virtualhost default
 dns druha.cz -> fyzicka IP apache, proxy -> ip virtual
 dns nedefeinovana -> fyzicka IP apache, proxy -> "default" ip

Teoreticky ta varianta s wildcardem by sla, ale je to svazane s presne danym regex domeny a neexistujici virtualhosty splnujici wildcard pak skonci na nedefaultnim serveru.

Samozřejmě to jde, Nginx umí výchozí server. Je to část konfigurace, která zpracuje vše, co není zpracováno výslovně jinde. Stačí tedy třeba do /etc/nginx/sites-enabled/ vložit soubor ostatni.conf a do něj vložit podobnou konfiguraci:

Kód: [Vybrat]
server {
        listen   80 default_server;
        listen   [::]:80 default_server;
        server_name _;

        proxy_pass http://192.168.1.1:8080/;
}

Totéž lze samozřejmě udělat pro HTTPS na 443. Pokud není nikde konfigurační sekce s daným server_name, Nginx použije tuhle jako sekci poslední instance a odbaví s ní všechno zbylé. Pak je samozřejmě na tom cílovém serveru, aby si s požadavkem nějak poradil a ukázal třeba chybovou hlášku nebo rozcestník pro uživatele typu: „Tuhle doménu tu nemáme, ale vyberte si ze seznamu jinou.“