Nginx redirect from http to https?

Добрый день


Хочу использовать только https и хочу сделать редирект с http на https

Делаю так
server {<br/>
 listen *:80;<br/>
 server_name example.com;<br/>
 rewrite ^(.*)$ https://$server_name$1 permanent;<br/>
}<br/>
<br/>
server {<br/>
 listen *:443;<br/>
 ...<br/>
}<br/>


и при переходе на example.com

The plain HTTP request was sent to HTTPS port


https работает нормально


enginx использую в качестве фронт-енда, апач в качестве бекенда.


Хочу чтобы все соединения до nginx шли в зашифрованном виде, а между nginx apache уже обычный http.


Что я делаю не так? Может есть какой-либо другой способ решить поставленную задачу?
  • Вопрос задан
  • 111984 просмотра
Решения вопроса 1
@ilnarb
а если так?
server {
  listen *:80;
  server_name example.com;
  proxy_set_header Host example.com;
  location / {
    rewrite ^(.*)$ https://example.com$1 permanent;
  }
}
server {
  listen *:443 ssl;
  server_name example.com;
  proxy_set_header Host example.com;
  location / {
    proxy_pass http://127.0.0.1:8080;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 10
@metajiji
Согласно официальной документации рекомендуют использовать такую конструкцию:
server {
        listen 80;
        server_name example.com;
        return 301 https://$server_name$request_uri;  # enforce https
#        rewrite ^(.*) https://www.example.com$uri permanent;
}
Ответ написан
nikitasius
@nikitasius
еще хороший вариант:
if ($ssl_protocol = "") {                                
                                rewrite ^/(.*) https://$server_name/$1 permanent;
}

У меня такой код для определенных location сделан. К примеру чтобы admin и иже с ними только через https работыли.
Ответ написан
Комментировать
XHunter
@XHunter
Сделайте так:
rewrite ^(.*) https://$server_name$1 permanent;
Ответ написан
Комментировать
@xtreme
Снимаю порчу по SSH :)
Блин, начал писать про редирект в коде, и почему-то вспомнил про .htaccess. Некрасиво получилось :)
В общем искать надо, где 443 стоит рядом с http://
Ответ написан
Комментировать
@V2NEK
Поправьте на
listen *:443 ssl;
Ответ написан
Комментировать
mastini
@mastini
Попробуйте так:

rewrite ^(.*) https://$host$1 permanent;
Ответ написан
@xtreme
Снимаю порчу по SSH :)
Только что ради эксперимента проделал такой редирект. Причем с буква-в-букву приведенным конфигом, за исключением server_name-ов. Все работает отлично. Видимо проблема не в данной части, а далее, например, в описании проксирования на апач.
proxy_redirect off; не забыли?
Ответ написан
Комментировать
@1099511627776
Пишу все что интересно и на всем на чем интересно
>400 Bad Request The plain HTTP request was sent to HTTPS port
Я думаю что тцт просто сам браузер не знает что надо посылать шифрованный запрос. и посылает назащифрованный.
Может стоит попробовать сделать редирект через сам движок
PHP:
header('Location: https://.........../');
Ответ написан
@dabster
не забываем в виртуалхосты апача добавить SetEnvIf X-Forwarded-Proto https HTTPS=on
Ответ написан
Комментировать
Помог вот такой вариант:
error_page 497 = @foobar;
location @foobar {
return 301 https://$host:$server_port$request_uri;
}

Хоть и писало "400 bad request", а перехватывается как 497
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы