Назад | Перейти на главную страницу

Цикл перенаправления при принудительном использовании SSL на сервере Nginx

В последнее время я пытаюсь перенаправить на HTTPS с помощью Nginx, но у меня продолжает возникать цикл перенаправления после того, как я пытаюсь посетить свой сайт в браузере. Вот мой полный файл конфигурации блока сервера:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    listen 443 ssl;

    root /var/www;
    index index.php index.html index.htm home.html contact.html projects.html;

    # Make site accessible from http://localhost/
    server_name melone.co;
    return 301  https://$host$request_uri;
    ssl_certificate /path/to/ssl;
    ssl_certificate_key /path/to/ssl;


    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }
    error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        root /var/www;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}

После поисков я обнаружил, что return 301 https://$host$request_uri; было бы самым простым способом сделать это.

Поэтому я внедрил его в свой файл конфигурации и запустил sudo service nginx restart. Затем я зашел в свой браузер и получил цикл перенаправления. Как только я удалил эту строку кода, она исчезла. Так что, как мне кажется, я действительно ищу более эффективный способ перенаправления на SSL.

Любая помощь будет оценена. Спасибо

В настоящее время вы перенаправляете весь трафик на https, что хорошо для http трафик, но для https трафик совершенно бессмысленен и приводит к петле перенаправления. Сейчас происходит следующее: http -> https -> https -> https -> https -> https ... и так до тех пор, пока ваш браузер не скажет вам: «Достаточно, мы не добьемся успеха».

Вы хотите перенаправить http трафик в https, и обработать https трафик (как и раньше с http трафик).

Итак, вам нужно разделить ваш конфиг на два server директивы: одна для http (который должен выполнить перенаправление), другой для https, который будет обрабатывать трафик.

Взгляните на этот пример:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name melone.co;
    return 301 https://$host$request_uri;
}

Добавь это server в свою конфигурацию, удалите соответствующие строки в существующем server блок, и прибыль!

Хорошо, я нашел проблему. Мне нужно два серверных блока. Один слушает порт 80 и перенаправляется на 443.

Я добавил это в начало своей конф:

server {
    listen 80 ;
       server_name    melone.co;
       return         301 https://$server_name$request_uri;
}