Nginx-Удалить WWW из HTTPS

3146
NetStudent

Я хотел бы попросить некоторую помощь со следующей конфигурацией Nginx, чтобы URL-адреса, такие как https://www.mywebsite.comпереписать как https://mywebsite.com. В настоящее время я использую следующую конфигурацию:

server { server_name www.mywebsite.com; return 301 $scheme://mywebsite.com$request_uri; } server { listen 80; server_name mywebsite.com;  # Some more settings... } server { listen 443 ssl; server_name mywebsite.com;  ssl_certificate path_to_ssl_certificate; ssl_certificate_key path_to_ssl_certificate_key;  # Some more settings... } 

В случае, если это имеет значение, сертификат, который я использую, является подстановочным SSL-сертификатом, который был самозаверяющим с использованием OpenSSL на самом сервере (Ubuntu 12.04). Происходит то, что www.mywebsite.comправильно перенаправляет mywebsite.com, но https://www.mywebsite.com не перенаправляет https://www.mywebsite.com(то есть, wwwвсе еще появляется при просмотре страницы в браузере). Что я могу делать не так?

1

2 ответа на вопрос

3
Dmitry Verkhoturov

Решением является фиксация первого блока сервера следующим образом:

server { listen 80; listen 443; server_name www.mywebsite.com; return 301 $scheme://mywebsite.com$request_uri; } 

Например, вы забыли перехватить соединения www.mywebsite.com через порт ssl, вот и все. Кстати, это лучший способ убрать www из названия сайта, хороший выбор.

0
mgorven

Перенаправление происходит на виртуальном хосте, прослушивающем только порт 80. Чтобы перенаправить запросы, поступающие через SSL, вам нужен виртуальный хост, прослушивающий порт 443 с SSL. Если все ваши браузеры не поддерживают SNI, у вас может быть только один виртуальный хост SSL, и поэтому правило должно входить в существующий serverблок SSL .

if ($host = www.mywebsite.com) { rewrite ^ https://mywebsite.com$request_uri? permanent; } 
Проголосовал из-за http://wiki.nginx.org/IfIsEvil Dmitry Verkhoturov 8 лет назад 0