Настройка SSL в Nginx 🔒 Правильный редирект на https

Настройка SSL в Nginx. Правильный редирект на https
Настройка SSL в Nginx. Правильный редирект на https

Корпорация Google уже неоднократно заявляла о том, что будет выше ранжировать сайты, которые работают через защищённое соединение. Firefox очень быстро подключился к этой теме и всячески пытается предупредить своих пользователей о том, что их данные могут оказаться в опасности если попытаться ввести логин и пароль на сайте без SSL шифрования.

Nginx SSL

Таким образом, если у вас есть форум или система комментирования, но сайт работает через не защищенное соединение, то пользователи у которых Firefox будут видеть то, что я показал на скриншоте выше. А это отпугивает посетителей. Поэтому сегодня будем решать эту проблему.

Ранее я уже писал статью о том как заставить работать в связке Apache2 и Nginx, где первый выступает в роли бэкэнда, а второй в роли фронтэнда. И если ваш сайт работает именно в такой связке, то я расскажу в сжатой и доступной форме как защитить передаваемый трафик между сервером и клиентом, используя механизм SSL шифрования.

Настройка SSL в Nginx

Для начала вам потребуется сам сертификат безопасности. Без него никак не получится перевести сайт на защищенное соединение. Если он у вас уже есть, то далее всё очень просто.

И так, открываем конфигурационный файл Nginx, а именно nginx.conf. Для начала сразу добавим конфигурацию для редирект с http на https. Для этого перед секцией server своего сайта добавляем:

server {
listen 11.22.33.44:80;
server_name intaiwan.ru www.intaiwan.ru;
rewrite ^(.*) https://$host$1 permanent;
}

На этом всё. Редирект с http на https мы настроили. Теперь переходим ниже, в саму секцию server нашего сайта. Там нам необходимо заменить строчку

listen 11.22.33.44:80;

на

listen 11.22.33.44:443 ssl;

а ниже добавляем строки:

ssl_certificate /папка/папка2/папка3/intaiwan.ru.pem;
ssl_certificate_key /папка/папка2/папка3/intaiwan.ru.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_buffer_size 4k;

Таким образом, настройка редиректа с http на https и защищённого соединения у нас должен выглядеть примерно так:

server {
listen 11.22.33.44:80;
server_name intaiwan.ru www.intaiwan.ru;
rewrite ^(.*) https://$host$1 permanent;
}

server {
listen 11.22.33.44:443 ssl;
server_name intaiwan.ru www.intaiwan.ru;
charset UTF-8;
error_page 404 = @fallback;
ssl_certificate /папка/папка2/папка3/intaiwan.ru.pem;
ssl_certificate_key /папка/папка2/папка3/intaiwan.ru.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_buffer_size 4k;
location / {..
...
...
}
}

А теперь нам необходимо внести небольшую запись в настройки Apache в секцию VirtualHost нашего сайта:

SetEnvIf X-Forwarded-Proto https HTTPS=on

Однако необходимо учитывать один важный момент. Вам необходимо будет переписать пути до картинок, стилей и скриптов с http на https. Иначе страницы будут отображаться с ошибками.