Рейтинг:1

Nginx слишком много перенаправляет при попытке перенаправить не с www на www

флаг cn

У меня есть эта конфигурация nginx

puma_example.it {
  сервер unix:/home/deploy/apps/example.it/shared/tmp/sockets/example.it-puma.sock fail_timeout=0;
}
сервер {
  слушать 80;
  слушать [::]:80;
  имя_сервера пример.it www.example.it;
  вернуть 301 https://www.example.it$request_uri;
}

сервер {
имя_сервера blog.example.com;
вернуть 301 http://www.example.com/blog$request_uri;
}


сервер {
  слушать 443 ssl http2;
  слушать [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  имя_сервера www.example.it пример.it;
  корень /home/deploy/apps/example.it/current/public;
  try_files $uri/index.html $uri @puma_example.it;
  вернуть 301 https://www.example.com$request_uri; 

  client_max_body_size 4G;
  keepalive_timeout 10;

  страница_ошибки 500 502 504 /500.html;
  страница_ошибки 503 @503;

  местоположение @puma_example.it {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Хост $host;
    прокси_перенаправление выключено;
    proxy_set_header Обновить $http_upgrade;
    proxy_set_header Соединение "Обновление";
    вкл.;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://puma_example.it;
    # limit_req zone=one;
    access_log /home/deploy/apps/example.it/shared/log/nginx.access.log;
    error_log /home/deploy/apps/example.it/shared/log/nginx.error.log;
  }

  местоположение ^~ /изображения/ {
    истекает макс.;
    add_header Cache-Control общедоступный;
  }

  расположение ~ ^/(активы|пакеты)/ {
    gzip_static включен;
    brotli_static включено;
    истекает макс.;
    add_header Cache-Control общедоступный;
  }

  местоположение = /50x.html {
    корень html;
  }

  местоположение @503 {
    error_page 405 = /system/maintenance.html;
    если (-f $document_root/system/maintenance.html) {
      переписать ^(.*)$ /system/maintenance.html break;
    }
    переписать ^(.*)$ /503.html break;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    вернуть 405;
  }

  если (-f $document_root/system/maintenance.html) {
    вернуть 503;
  }
}

Я пытаюсь перенаправить не www на www и перенаправить блог стороннего домена на определенный URL-адрес, но я думаю, что добавление

вернуть 301 https://www.example.com$request_uri;

в этом положении это вызывает цикл перенаправления. Где я должен разместить его? Что не так в этом конфиге?

Я также пытаюсь разделить блоки

puma_example.it {
  сервер unix:/home/deploy/apps/example.it/shared/tmp/sockets/example.it-puma.sock fail_timeout=0;
}

сервер {
  слушать 80;
  слушать [::]:80;
  имя_сервера пример.it www.example.it;
  вернуть 301 https://www.example.it$request_uri;
}

сервер {
  слушать 443 ssl http2;
  слушать [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  имя_сервера пример.it;
  вернуть 301 https://www.example.it$request_uri;
}

сервер {
  слушать 443 ssl http2;
  слушать [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  имя_сервера hinnovation.example.it;
  вернуть 301 https://www.example.it/speciale/innovation$request_uri;
}


сервер {
  слушать 443 ssl http2;
  слушать [::]:443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/example.it/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.it/privkey.pem;
  имя_сервера www.example.it;
  корень /home/deploy/apps/example.it/current/public;
  try_files $uri/index.html $uri @puma_example.it;

  client_max_body_size 4G;
  keepalive_timeout 10;

  страница_ошибки 500 502 504 /500.html;
  страница_ошибки 503 @503;

  местоположение @puma_example.it {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Хост $host;
    прокси_перенаправление выключено;
    proxy_set_header Обновить $http_upgrade;
    proxy_set_header Соединение "Обновление";
    вкл.;
    proxy_set_header X-Forwarded-Proto https;
    proxy_pass http://puma_example.it;
    # limit_req zone=one;
    access_log /home/deploy/apps/example.it/shared/log/nginx.access.log;
    error_log /home/deploy/apps/example.it/shared/log/nginx.error.log;
  }

  местоположение ^~ /изображения/ {
    истекает макс.;
    add_header Cache-Control общедоступный;
  }

  расположение ~ ^/(активы|пакеты)/ {
    gzip_static включен;
    brotli_static включено;
    истекает макс.;
    add_header Cache-Control общедоступный;
  }

  местоположение = /50x.html {
    корень html;
  }

  местоположение @503 {
    error_page 405 = /system/maintenance.html;
    если (-f $document_root/system/maintenance.html) {
      переписать ^(.*)$ /system/maintenance.html break;
    }
    переписать ^(.*)$ /503.html break;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    вернуть 405;
  }

  если (-f $document_root/system/maintenance.html) {
    вернуть 503;
  }
}
Рейтинг:1
флаг us

Вам нужно иметь отдельные сервер блоки для вашего www и не-www домены.

сервер {
    слушать 443 ssl http2;
    слушать [::]:443 ssl http2;
    ssl_сертификат ...
    ssl_certificate_key ...
    имя_сервера пример.it;

    вернуть 301 https://www.example.com$request_uri;
}

сервер {
    слушать 443 ssl http2;
    слушать [::]:443 ssl http2;
    ssl_сертификат ...
    ssl_certificate_key ...
    имя_сервера www.example.it;

    ... остальная конфигурация ...
}
флаг cn
Я редактирую, но это не работает. Сторонняя переадресация работает, работает не с www на www
флаг us
Извините, вы написали выше, что оба "работают". В чем тогда проблема?
флаг cn
Ах, извините. Не с www на www не работает
флаг us
Пожалуйста, добавьте вывод `curl -v ` на исходный вопрос, где `` — URL-адрес HTTP, который вы пытаетесь ввести. Так мы сможем увидеть, что именно происходит.
флаг cn
сайт https://dday.it

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.