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
#Listen 80
a doplníte
Listen 8080
a
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
sudo apt install nginx
měl by se po instalaci spustit.
Dále vytvoříme certifikáty Let'sEncrypt - jsou zdarma - pro mne nejjednodušší je použít Certbot
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:
certbot --nginx
př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
/etc/nginx/
kde je nginx.conf. Tento soubor jsem ponechal ve výchozím stavu. Pro nás je důležitý
/etc/nginx/sites-available/default
kde 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
/etc/nginx/sites-available/default
takto
#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
systemctl restart nginx
Od 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.czPokud 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:
nano /etc/nginx/sites-available/neco.moje_domena.cz
a do souboru vložíme
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
/etc/nginx/sites-enabled/@neco.moje_domena.cz
Ve výsledku by v adresáři sites-enable měly být dva simlinky
@default
a
@neco.moje_domena.cz
Nakonec můžete příkazem
nginx -t
zkontrolovat, 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ší.