301 редирект з www. та http: на https://(без www.)domain

В інтерфейсі керування VPS була відмічена галочка "Увімкнути автоматичний HTTPS редирект" (nginx.forcessl.conf* - це воно?) і з http на https переходило, а налаштування з www на без_www - такого налаштування не було. Можна було писати правила в .htaccess, але було цікаво, як налаштувати це на Nginx...

В /etc/nginx/conf.d/domains - мали лінки на Nginx-конфіги сайту (без та з ssl):

sitename.pp.ua.conf -> /home/cruad/conf/web/sitename.pp.ua/nginx.conf
sitename.pp.ua.ssl.conf -> /home/cruad/conf/web/sitename.pp.ua/nginx.ssl.conf

Ось ці файли зі скороченнями:

nginx.conf

server {
    listen      185.111.111.45:80;
    server_name sitename.pp.ua www.sitename.pp.ua;
       error_log   /var/log/apache2/domains/sitename.pp.ua.error.log error;

       include /home/cruad/conf/web/sitename.pp.ua/nginx.forcessl.conf*;
...
       }

nginx.ssl.conf

server {
    listen      185.111.111.45:443 ssl;
    server_name sitename.pp.ua www.sitename.pp.ua;
    error_log   /var/log/apache2/domains/sitename.pp.ua.error.log error;

    ssl_certificate     /home/cruad/conf/web/sitename.pp.ua/ssl/sitename.pp.ua.pem;
    ssl_certificate_key /home/cruad/conf/web/sitename.pp.ua/ssl/sitename.pp.ua.key;
    ssl_stapling    on;
    ssl_stapling_verify on;
...
    include /home/cruad/conf/web/sitename.pp.ua/nginx.hsts.conf*;
...   
    include /home/cruad/conf/web/sitename.pp.ua/nginx.ssl.conf_*;
}

nginx.conf підправляємо так, щоби запити на http://домен та http://www.домен булиь переправлені на https://домен:

server {
    listen      185.111.111.45:80;
    server_name sitename.pp.ua www.sitename.pp.ua;
    return 301 https://sitename.pp.ua$request_uri;
}

В nginx.ssl.conf додаємо ще одну секцію server в якій запити на https://www.домен будуть переправлені на https://домен. В другій секції server в директиві server_name залишаємо тільки sitename.pp.ua (www.sitename.pp.ua - видаляємо)

server {
    listen      185.107.237.45:443 ssl;
    server_name www.sitename.pp.ua;
    return 301 https://sitename.pp.ua$request_uri;
}

server {
    listen      185.107.237.45:443 ssl;
    server_name sitename.pp.ua;
    error_log   /var/log/apache2/domains/sitename.pp.ua.error.log error;

    ssl_certificate     /home/cruad/conf/web/sitename.pp.ua/ssl/sitename.pp.ua.pem;
    ssl_certificate_key /home/cruad/conf/web/sitename.pp.ua/ssl/sitename.pp.ua.key;
    ssl_stapling    on;
    ssl_stapling_verify on;
...
    include /home/cruad/conf/web/sitename.pp.ua/nginx.hsts.conf*;
...   
    include /home/cruad/conf/web/sitename.pp.ua/nginx.ssl.conf_*;
}

Last updated