Jak pod NGINX przekierować ruch z HTTP na HTTPS

Po skonfigurowaniu certyfikatów SSL i dodaniu wsparcia dla protokołu HTTPS wskazane jest automatyczne przekierowywanie połączeń niezabezpieczonych na szyfrowane. Oto jak zrobić to wykorzystując popularny serwer NGINX.

Chesz przetestować działanie poniższych instrukcji, a nie masz dostępu do serwera Linuxowego? Po rejestacji na DigitalOcean otrzymasz 100 dolarów do wykorzystania w ciągu 60 dni, a z przyjaznym interfejsem uruchomisz ulubioną dystrybucję w ciągu paru minut.

Najczęściej stosowaną metodą konfiguracji są osobne pliki conf dla każdej ze stron. Typowy plik konfiguracyjny nie posiadający wsparcia dla HTTPS ani przekierowania powinien prezentować się w następujący sposób:

# Oryginalny blok server gdzie znajduje sie cala konfiguracja strony www
server {
    listen 80;
    server_name adres_strony.com;

    root   /var/www/adres_strony.com;
    index index.html index.htm
    ....
}

Zwykle w bloku server umieszczona jest dyrektywa listen definiująca port na którym serwer będzie oczekiwał połączeń oraz server_name zawierającej adres serwowanej strony www. Później zwykle umieszcza się resztę niezbędnej konfiguracji która na potrzeby wpisu nie jest potrzebna.

Wymuszenie stosowanie protokołu HTTPS to kwestia zmiany portu istniejącej już konfiguracji na 443 i dodaniu nowego bloku server który ruch z portu 80 ma przekierować na 443.

# Dodatkowy blok server obslugujacy przekierowanie na https
server {
    listen 80;
    server_name adres_strony.com;
    return 301 https://$host$request_uri;
}

# Nieco zmodyfikowany, oryginalny blok server gdzie znajduje sie cala konfiguracja strony www
server {
    listen 443 ssl;
    server_name adres_strony.com;

    root   /var/www/adres_strony.com;
    index index.html index.htm
    ....
}