Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: nginx proxy  (Přečteno 2552 krát)

radin

  • Aktivní člen
  • *
  • Příspěvků: 245
nginx proxy
« kdy: 23 Listopadu 2023, 07:56:38 »
Zdravím
Mám problém - resp. blbnu - s konfigurací NGINX proxy pro jednu doménu 2. řádu a jednu subdoménu na stejné doméně.
Aktuální stav:
Veřejná IP
Na serveru mám spuštěný Apache2 a Nginx v režimu proxy. Apache je konfigurovaný jako "localhost" s upraveným(i) portem(ty)(kvůli SSL - Let's Encrypt) a potud je vše v pořádku, proxy i web funguje. Na DNS serveru (cesky-hosting) mám nastavenou doménu (příklad) 'muj_web.cz a pomocí CNAME subdomenu 'neco.muj_web.cz'
Na serveru mi současně běží (a funguje) ve virtuálu (KVM) jiný web server s vlastní lokální IP a na jiném portu.
Problém: Nedaří se mi nakonfigurovat Nginx tak, aby požadavky na 'muj_web.cz' chodily na localhost a požadavky na 'neco.muj_web.cz' chodily na virtuál.
Pro začátek jsem zvolil verzi bez SSL s tím že to pak doplním, ale stále končím tím, že oboje je nedostupné. Prošel jsem asi 50 různých odkazů na nastavení, ale stále jsem mimo. Poradí někdo? Konfiguráky dodám...
Nobody is perfect!

Michal "Tylnesh" Kohútek

  • Administrátor fóra
  • Stálý člen
  • ******
  • Příspěvků: 1076
    • Lords Of Tech
Re:nginx proxy
« Odpověď #1 kdy: 23 Listopadu 2023, 09:20:38 »
Dodaj konfiguraky
https://lordsoftech.com

Registered Linux User #506395

--- Smartphone 0: Apple iPhone 11
--- Smartphone 1: OnePlus 3T - Ubuntu Touch
--- Laptop 0: Apple Macbook Air M1
--- Laptop 1: Lenovo Thinkpad X1 Carbon Gen 3
--- Workstation: Ryzen 7 2700X, RX 5700XT, 32GB RAM
--- Other: Niekolko kusov od kazdeho vydaneho variantu Raspberry Pi

radin

  • Aktivní člen
  • *
  • Příspěvků: 245
Re:nginx proxy
« Odpověď #2 kdy: 23 Listopadu 2023, 10:31:33 »
Přikládám konfiguráky:
 default_funkcni > na tom momentálně jedu, uloženo v /etc/nginx/sites_available, symlink do /etc/sites_enabled jako default
 moje_domena.cz a neco.moje_domena.cz pro oba servery, uloženo v /etc/nginx/sites_available, při zkoušení vytvořeny symlinky do /etc/sites_enabled, symlink na původní default zrušen a pak restart nginx
V těch testovacích NENÍ použito SSL, to předpokládám, až se mi to podaří rozchodit.
Musel jsem přepsat příponu, aby to forum vzalo, original jsou .cz místo .txt
Díky za zájem a případné odpovědi. R.
 

« Poslední změna: 01 Prosince 2023, 09:58:25 od radin »
Nobody is perfect!

radin

  • Aktivní člen
  • *
  • Příspěvků: 245
Re:nginx proxy
« Odpověď #3 kdy: 01 Prosince 2023, 13:22:41 »
Odstranil sem několik předchozích příspěvků jako irevelantních a přidávám funkční výsledek, jak jsem k němu nakonec dospěl. Protože celá problematika je složitější, popíšu můj postup, pokud to někoho zajímá. A prosím - nejsem specialista, tak mne za případné chyby nekamenujte. Mě to takto funguje.
Nejdříve k subdoméně:
pokud máte registrovanou doménu, můžete si k ní zdarma vytvořit "neomezený" počet subdomén. Zde vzhledem k SSL šifrování Let'sEncrypt doporučuji vytvořit aliasy s A záznamem, při použití CNAME nejde A záznam vytvořit a s tím si pak CertBot nerozumí.
Dále, předpokládám, že máte nějaký vyhrazený server na lokální IP adrese. Na routeru je třeba přesměrovat porty 80 a 443 na tuto IP.
Na mém serveru běží lokální Apache2 a dále virtuální server (KVM), na něm HA-OS s vlastní IP a portem. Na Apache byl už před tím vytvořen přístup přes SSL aby se nezobrazovala trapná hláška, že server není bezpečný. Žádná hesla se zde nezadávají, tak nevím proč by to bylo nutné. No, "no comment"...
Příprava: u Apache změníme poty virtuálů: původní port 80 přepíšeme na 8080, stejně 443 na 8443 a restartujem Apache. Nezapmeněte také na port.conf, kde (pro jistotu) zakomnetujete řádek
Kód: [Vybrat]
#Listen 80 a doplníte
Kód: [Vybrat]
Listen 8080 a
Kód: [Vybrat]
Listen 8443 Tím zabezpečíte, že Apache bude ignorovat původní port 80.
Nejsem si jistý, jestli musí být povoleny oba, domnívám se, že přes Nginx stačí jen HTTP, ale funguje to, tak to asi nevadí.
Dále nainstalujeme Nginx
Kód: [Vybrat]
sudo apt install nginxměl by se po instalaci spustit.
Dále vytvoříme certifikáty Let'sEncrypt - jsou zdarma - pro mne nejjednodušší je použít Certbot
Kód: [Vybrat]
https://certbot.eff.org/ zde jen vyberete svůj OS a server Nginx, postupujte podle instrukcí (pro Debian doporučují SNAP - opět je zde návod na instalaci). DǓLEŽITÉ ! Je potřeba mít funkční DNS záznamy ! Já např. používám CloudFlare DNS, ale můj správce domény má vlastní a tak trvalo několik hodin, než se jeho záznamy propsaly až na CloudFlare. Takže raději použití Certbot přesuňte na další den.
Certbot je svým způsobem geniální - nejen že vytvoří certifikáty a upraví vám konfiguráky, ale přidá také příkaz do cronu a certifikáty pravidelně kontroluje/aktualizuje. Takže máte po starostech.
Jakmile jste si jistí, že je vše v pořádku, stačí spustit:
Kód: [Vybrat]
certbot --nginxpři instalaci stačí potvrdit předvolené volby. Důležité je, aby byly vybrány i všechny domény, včetně subdomény, pro které certifikát požadujete. V případě jedné domény a subndomény jsou obvykle tři: www.moje_domena.cz, moje_domena.cz a neco.moje_domena.cz. Pak jen stačí počkat na dokončení instalace a restartovat nginx (nebo celý server). Pokud se vám v seznamu subdoména nezobrazí, je něco špatně s DNS nebo se ještě "nepropsala".
Tím je celá instalace reverzní proxi připravena a je čas na konfiguraci.
Pro debianí OS je základní konfigurační soubor (pozor, u ubuntu serveru je to asi jinak, ale nevím, ubu nepoužívám, podrobnosti najdete v dokumentaci) v
Kód: [Vybrat]
/etc/nginx/kde je nginx.conf. Tento soubor jsem ponechal ve výchozím stavu. Pro nás je důležitý
Kód: [Vybrat]
/etc/nginx/sites-available/defaultkde upravíme podle sebe.
Předpokládám, že máte registrovanou doménu např.: 'moje_domena.cz'. K ní se obvykle automaticky vytváří alias 'www.moje_domena.cz' (ale není to podmínka, klidně můžete registrovat jednu nebo druhou). Dále jsme si vytvořili ve správě DNS alias 'neco.moje_domena.cz'
Upravíme soubor
Kód: [Vybrat]
/etc/nginx/sites-available/default takto
Kód: [Vybrat]
#upraveno
       server_name moje_domena.cz www.moje_domena.cz;

        location / {
                proxy_pass http://localhost:8080;
                include /etc/nginx/proxy_params;
        }


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/moje_domena.cz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/moje_domena.cz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
Restartujem nginx
Kód: [Vybrat]
systemctl restart nginxOd teď bychom se měli mít možnost připojit k původnímu serveru Apache i z internetu na adrese moje_domena.cz s tím, že se automaticky přesměrovává na https://moje_domena.cz
Pokud je vše OK můžem pokračovat. S oblibou používám v terminálu správce souborů 'mc' a k němu připojený editor (výchozí volba) 'nano'. Takže zadáme:
Kód: [Vybrat]
nano /etc/nginx/sites-available/neco.moje_domena.cz a do souboru vložíme
Kód: [Vybrat]
server {
    if ($host = neco.moje_domena.cz) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name neco.moje_domena.cz;
    return 301 https://$host$request_uri;


}

server {
    listen 443;

    server_name neco.moje_domena.cz;

    ssl_certificate /etc/letsencrypt/live/moje_domena.cz/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/moje_domena.cz/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
        proxy_pass http://<IP_moje>:<port_moje>;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

}

a uložíme. Pak už jen zbývá vytvořit link do adresáře
Kód: [Vybrat]
/etc/nginx/sites-enabled/@neco.moje_domena.cz Ve výsledku by v adresáři sites-enable měly být dva simlinky
Kód: [Vybrat]
@defaulta
Kód: [Vybrat]
@neco.moje_domena.cz Nakonec můžete příkazem
Kód: [Vybrat]
nginx -tzkontrolovat, jestli je konfigurace správně a pak opět restartovat nginx.
Hotovo, měl by fungovat přístup jak na 'moje_domena.cz', tak na 'neco.moje_domena.cz' a to vždy s přesměrováním na HTTPS.
No, přípěvek je "trochu" delší, ale třeba někomu pomůže. A na závěr: je to BEZ ZÁRUKY! Případně bezpečnostní problémy je třeba řešit dodatečně, ale k tomu se snad vyjádří někdo kompetentnější.

Nobody is perfect!

 

Provoz zaštiťuje spolek OpenAlt.