NGINX — перенаправление местоположения с https на http (цикл перенаправления)

Пытаюсь перенаправить локацию с https на http, получаю петлю переадресации в браузере.

PS Я установил certbot (Let's Encrypt), чтобы получить сертификат ssl.

Я пробовал разные серверные блоки, один и тот же серверный блок, возвращал 301, переписывал, но ничего не помогает.

server { 
    root /usr/share/nginx/www;
    index index.html index.htm index.php;

    server_name example.com;

    # Make site accessible from http://localhost/

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }

    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 /usr/share/nginx/www;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location /update {
        return 301 http://example.com$request_uri;
    }

    listen 443 ssl; # managed by Certbot

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot 
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen   80;
    server_name example.com;
    return 404; # managed by Certbot
}

Я хочу, чтобы https://example.com/update/ перенаправлял на http://example.com/update/

Ваш второй блок server просто перенаправляет http обратно на https. Вам нужно решить, как будет обрабатываться http://example.com/update/, прежде чем вы начнете перенаправлять на него.

Richard Smith 22.01.2019 21:29

Не возвращает конец файла? Во всяком случае, я переместил второй серверный блок выше первого, это не имело никакого значения. Довольно новичок в этом, поэтому я не совсем понимаю, как его редактировать, чтобы он работал.

Patrik 22.01.2019 22:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
643
1

Ответы 1

Я полагаю, вам нужно изменить эту часть.

server {
if ($host = example.com) {
    return 301 https://$host$request_uri;
} # managed by Certbot

listen   80;
server_name example.com;
return 404; # managed by Certbot
}

Чтобы только это.

server {
listen   80;
server_name example.com;
}

Редактировать: Так что, если после этого он вообще ничего не перенаправляет на https, то я ошибаюсь. Давайте тогда попробуем добавить исключение перенаправления для вашего пути /update, добавив строку вроде: location /update {} где-нибудь в коде ниже? Если кто-то может попытаться проникнуть в это, это было бы здорово. Я не уверен, правильно ли это делать или нет.

server {
if ($host = example.com) {
    return 301 https://$host$request_uri;
} # managed by Certbot

listen   80;
server_name example.com;
return 404; # managed by Certbot

}

Но тогда он вообще ничего не перенаправит на https?

Patrik 23.01.2019 08:42

Я отредактировал ответ, возможно, добавив исключение перенаправления на https во втором блоке сервера. Не уверен, что это способ сделать это, или это даже правильно, возможно, кто-то еще может подтвердить.

Wade Worn 23.01.2019 12:14

Другие вопросы по теме