Nginx a SSL přesměrování pro všechny subdomény

Jak nastavit SSL pro nginx je krásně popsané v dokumentaci. Co mě ale zarazilo, tak že jsem nenašel jak přesměrovat všechny subdomény a jejich requesty na sebe sama ale pod HTTPS. Respektive, našel jsem jedno relevantní vlánko na serverfault, ale to nefunguje jak potřebuju.

Když použiju

server_name     kdyby.org *.kdyby.org;
return          301 https://$servername$request_uri;

tak to se mi to nedařilo přinutit přesměrovávat help.kdyby.org na https://help.kdyby.org, místo toho to skákalo na https://kdyby.org a házelo chyby. Proměnná $server_name totiž obsahuje první doménu, co jí nastavíte (v tomhle případě kdyby.org).

Jediné co mi fungovalo, tak použít regulární výrazy a přidat si vlastní proměnnou.

server {
        listen          80;
        server_name     ~^(?<servername>(:?.+\.)?kdyby.org)$;
        return          301 https://$servername$request_uri;
}

server {
        listen          443 default ssl;

        # ...
}

Doufám, že na to existuje lepší řešení (jestli víte, podělte se prosím v komentářích), ale tohle je dostatečně funkční, takže za mě fuck it :)

UPDATE: když jsem projížděl dokumentaci poprvé, tak jsem přehlédl proměnnou $host, na kterou mě teď upozornil @tomasfejfar, díky!

Řešení je tedy následující

server {
        listen          80;
        server_name     kdyby.org *.kdyby.org;
        return          301 https://$host$request_uri;
}

server {
        listen          443 default ssl;

        # ...
}
Have you found a typo? Fix me

Autor:

comments powered by Disqus