Задать вопрос
@lexjusto

Как настроить редирект с www на без www + HTTPS в Nginx?

Здравствуйте, до использования HTTPS использовал такую конструкцию переадресации с www на non-www домен в Nginx главном конфиге:

http {
    server {
        server_name "~^www\.(.*)$" ;
        return 301 $scheme://$1$request_uri ;
    }
}


Но сейчас добавил HTTPS к своему домену и обнаружил что это не работает так как должно.

Если конкретно, то:

С www.domain.com правильно переадресует на domain.com (HTTP)
А вот с https://www.domain.com НЕ переадресует на https://domain.com (HTTPS)

Как сделать это в главном конфиге nginx не затрагивая локальные хосты?
  • Вопрос задан
  • 9797 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@lexjusto Автор вопроса
Всем спасибо. Сам пришел к правильному решению. Делюсь с вами:

server {
    server_name www.example.com example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;

    ssl_certificate /path/to/server.cert;
    ssl_certificate_key /path/to/server.key;

    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate /path/to/server.cert;
    ssl_certificate_key /path/to/server.key;
    server_name example.com;

    <все локации основного домена>
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@metajiji
Вам нужно сделать 2 сервера для http м для https отдельно, в https сервере нужно прописать listen, настроить сертификаты... Ведь, чтобы клиент мог получить 301 код, ему нужно отправить запрос на сарвер, ваш сервер не слушает на https:)
И ещё я бы рекомендовал использовать так называемые именованные regexp, вместо $1
Ответ написан
VELIK505
@VELIK505
Руководитель департамента profitcentr.com
Что за привычка плодить секции server ? Что за дедовский метод? Всё прекрасно делается в одной секции.
server {
	server_name mysite.com;
	root /var/www/user/data/www/mysite.com;
        index index.php;
		try_files  $uri $uri/ @rewrite;
	listen 123.456.789.11;
	listen 123.456.789.11 ssl http2;
	charset UTF-8;
.....
	set $root_path /.......;
        ssl_certificate /......;
        ssl_certificate_key /......;
      ......
.....
..........
        add_header Strict-Transport-Security "max-age=31536000";
.....
......
if ($scheme = http) {
rewrite ^ https://$http_host$request_uri? permanent;
}
if ($http_host !~ "^mysite.com$"){
rewrite ^(.*)$ https://mysite.com$1 redirect;
}
......
.....
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы