На Хабре опубликовано много статей по настройке https. В том числе возможные конфигурации nginx с объяснениями и комментариями к самой статье. Некоторые из статей обретали свой ценный информационный посыл уже после того, как сообщество поделилось своим опытом. По моему скромному мнению, полнота, целостность и ясность информации – лучший друг любой из технологий. Предлагаю собрать воедино всю информацию и написать следующие статьи, которые войдут в серию «Only HTTPS».
- Конфигурируем web-сервер nginx;
- Nginx. Массовый редирект на TCP-порт;
- CDN–провайдер. Ускорение отдачи web-контента.
Все запросы клиента на 80 порт будем перенаправлять на 443.
Ещё мы можем на прямое обращение клиента по ip и не заданные у вашего web-сервера хосты возвращать код 444, закрывая тем самым соединение без передачи заголовка ответа.
Посмотрим на следующий листинг:
#nginx.conf
map $scheme:$host $redirect {
#~^https:www.(.*) 1;
~^http:(.*) 1;
default 0;
}
#virtual.conf
server {
listen 443;
listen 188.326.226.30 default_server;
server_name 188.326.226.30;
return 444;
}
#domen-name.conf
server {
listen 443 ssl;
listen domen-name.ru:80; # open port 80
server_name .domen-name.ru; # dot this detected ssl_certificate from www
ssl_certificate /usr/local/nginx/conf/ssl/ssl.pem;
ssl_certificate_key /usr/local/nginx/conf/ssl/ssl.key;
...
...
if ($redirect) {
return 301 https://$server_name$request_uri;
}
}
В контексте http создаем директиву map. И установим в переменной $redirect, нужные нам значения.
Первое условие, которое закомментировано, собственно и послужило формированию именно этого листинга. Теперь поясню, почему.
Мы не сможем настроить единый сервер, который слушал бы HTTPS-запросы и делал множественные редиректы, допустим, с www или на оборот. Следовательно, делать редирект будем в контексте конфинга домена(ов).
Второе условие указывает на редирект с http.
Такое решение это выход из ситуации, когда один IP и множество хостов.