NGINX HTTP / NON-WWW to HTTPS вызвал слишком много перенаправлений

Я хочу 301 перенаправить все не-https и не-www на https://www.example.com , используя следующую конфигурацию, которую я нашел в другом потоке в качестве принятой ответ. Но у меня это не работает.

Что работает:

  • https://example.com -> https://www.example.com

  • http://example.com -> https://www.example.com

НО ...

  • http://www.example.com -> СЛИШКОМ МНОГО ПЕРЕНАПРАВЛЕНИЙ ... используя curl I. видно, что это всегда перенаправляет на себя ...

Вот мой nginx.conf :

server {

    # ports
    listen 80;
    listen [::]:80;

    # domain name
    server_name example.com www.example.com;

    # Redirect all non-https requests
    rewrite ^ https://www.example.com$request_uri? permanent;
}

server {

    if ($bad_referer) {
        return 444;
    }

    if ($bad_bot) {
        return 444;
    }

    # ports
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    # domain name
    server_name example.com www.example.com;

    if ($host = 'example.com') {
      return 301 https://www.example.com$request_uri;
    }

    # ssl certificate files
    ssl_certificate /etc/ssl/certs/domain.crt;
    ssl_certificate_key /etc/ssl/private/domain.key;

    include basic.conf;
}

Есть идеи?

Обновление : Становится еще более странным ... Я попытался сделать общее правило для маршрутизации всего в ssl (как предлагается во многих блогах) ... теперь www, а также версии без www перенаправляются обратно на себя ...

server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;

    return 301 https://$host$request_uri;
}

Я понятия не имею, как отлаживать это ... кстати ... это докер скопление роя ... если это поможет ...

1
задан 16 November 2018 в 13:29
1 ответ

После тестирования мне пришлось отредактировать свой исходный ответ, потому что это привело к ошибке конфликтующего имени сервера .

К сожалению, я не могу сказать вам, почему вы по-прежнему получаете этот цикл перенаправления - возможно, ошибка связана с вашим включением. Но я могу представить вам рабочую (протестированную) конфигурацию, которая выполняет то, о чем вы просили:

В общем: Для довольно простого перенаправления рекомендуется использовать директиву return вместо redirect ( https://www.nginx.com/blog/creating-nginx-rewrite-rules/ )

Цель: Любая комбинация

  • схемы ( http или https )
  • и домена ( example.com или www.example.com ])

вы вводите в браузере, вы будете перенаправлены на https://www.example.com

Вот конфигурация:

server {

listen 80;

server_name www.example.com redirecttest.de;

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

}

server {

listen 443 ssl http2;

server_name www.example.com;

root /var/www/example.com/http;

ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

}
1
ответ дан 3 December 2019 в 23:10

Теги

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