Only HTTPS. Nginx. Массовый редирект на TCP-порт

в 0:29, , рубрики: Песочница, метки: , ,

На Хабре опубликовано много статей по настройке https. В том числе возможные конфигурации nginx с объяснениями и комментариями к самой статье. Некоторые из статей обретали свой ценный информационный посыл уже после того, как сообщество поделилось своим опытом. По моему скромному мнению, полнота, целостность и ясность информации – лучший друг любой из технологий. Предлагаю собрать воедино всю информацию и написать следующие статьи, которые войдут в серию «Only HTTPS».

  • Конфигурируем web-сервер nginx;
  • Nginx. Массовый редирект на TCP-порт;
  • CDN–провайдер. Ускорение отдачи web-контента.

Only HTTPS. Nginx. Массовый редирект на TCP-порт - 1

Все запросы клиента на 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 и множество хостов.

Поделиться

* - обязательные к заполнению поля