@bozuriciyu

Как редиректить с www в catch all блоке, когда не используется server_name?

С такими настройками выбивает в браузере ошибку "слишком много редиректов"

server {
  listen 80 default_server;
  listen [::]:80 default_server;

  location / {}
}

server {
  listen 80;
  listen [::]:80;
  server_name www.*;
  return 301 $scheme://$host$request_uri;
}


Как тогда редиректить default_server?
  • Вопрос задан
  • 879 просмотров
Решения вопроса 1
@dodo512
server {
  listen 80;
  listen [::]:80;
  server_name www.*;
  return 301 $scheme://$host$request_uri;
}

Там в $host будет домен с www и произойдёт зацикливание.
server {
  listen 80;
  listen [::]:80;
  server_name ~^www\.(?<domain>.+)$;
  return 301 $scheme://$domain$request_uri;
}

Или
map $host $domain {
    ~^www\.(.+) $1;
}

server {
  listen 80;
  listen [::]:80;
  server_name www.*;
  return 301 $scheme://$domain$request_uri;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
зачем вы вообще используете default_server; ?
На нем поставьте "здрасти этот сервер но что-то пошло не так"
А для сайта сделай нормальный отдельный файл с отдельным

server {
 listen *:80;
        server_name www.site.ru site.ru  ;
        root /var/www/site.ru/web;
.........

 server {
 listen *:443;
        server_name www.site.ru site.ru  ;
        root /var/www/site.ru/web;
.........
Ответ написан
Ваш ответ на вопрос

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

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