LINUX.ORG.RU

redirect http -> https

 , ,


2

2

Доброго времени суток. Редирект настроен, но не очень понятен один момент. Если я принудительно ввожу ссылку http://mysite.com, то в итоге прихожу на сайт http и соотвественно сертификат ssl не получаю. Если ввожу просто mysite.com, то всё ок. Добавлю, что сайт на чистом nginx.

server {
listen 80;
server_name mysite.com;
return 301 https://mysite.com/;

#так же пробовал такие записи и честно говоря разницы не понял

return 301 https://$server_name$request_uri;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name mysite.com;
...
}

Так и должно быть?

Если я принудительно ввожу ссылку http://mysite.com, то в итоге прихожу на сайт http и соотвественно сертификат ssl не получаю. Если ввожу просто mysite.com, то всё ок

Так не бывает. Ну либо кто-то не умеет пользоваться браузером...

server {

После изменения конфига нужно выполнить reload

router ★★★★★ ()
Ответ на: комментарий от DonkeyHot

Можно пруф?

ИМХО, тут какой-то культ карго зарождается. nginx только возвращает редирект ( причём тому, кто отправил запрос ), а выполняет его браузер

Единственное что нужно помнить - редирект нельзя возвращать на POST запросы

ИМХО, redirect на GET запросы по http нельзя возвращать только в одном случае - если в URL пароль или какие-то персональные данные. Но в этом случае разработчик, админ и владелец сайта - сказочные дятлы

router ★★★★★ ()
return 301 https://$server_name$request_uri;

Это верный вариант, но проблема не в этом.

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

Еще неплохо бы посмотреть оставшуюся часть конфига. В нормальном варианте, если у тебя конфиг как указан выше и больше нет никаких серверов, то nginx не отдаст сайт по 80 порту без сертификата, потому что там даже корень не отмечен, а тупо стоит редирект.

anonymous ()
Ответ на: комментарий от router

Можно пруф?

Сканеры говорят, что злонамеренный:

curl -H "Host: хацкерский.сайт" http://твой.сайт/урль

«может» сгенерить редирект, который «может» запомниться в кеше клиентского прокси, и вся контора за последним, «может» начать грузить злобный контент.

ИМХО, тут какой-то культ карго зарождается

Похоже. Однако фантазия успешных взломщиков таки превышает пользовательский «common sense», т.ч. последним пользоваться опасно в этих вопросах.

DonkeyHot ★★★★★ ()
Последнее исправление: DonkeyHot (всего исправлений: 1)
Ответ на: комментарий от bdfy

DonkeyHot

Странно, что везде советуют именно такую конструкцию

Не везде, но встречается, как и на ру форумах, так и забугром.

Говорят, так делать не нужно, т.к. данные поставляются потенциальным зловредным взломщиком.

За эту инфу спасибо.

Это верный вариант, но проблема не в этом.

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

Еще неплохо бы посмотреть оставшуюся часть конфига. В нормальном варианте, если у тебя конфиг как указан выше и больше нет никаких серверов, то nginx не отдаст сайт по 80 порту без сертификата, потому что там даже корень не отмечен, а тупо стоит редирект.

Спасибо. Сайт не один, 5 если быть точнее, для каждого свой конфиг и в каждом слушают 80 порт и соответственно делают редирект. Конфиги везде одинаковые, за исключением сертификатов и адресов. Фулл конфиг скину как доберусь до компа - через пол часа где-то.

imsystem ()
Ответ на: комментарий от imsystem

Полный конфиг

server {

        listen 443 ssl;


        server_name mysite.com;


        location / {
        expires 1h;
        #GZIP
        gzip            on;
        gzip_min_length 100;
        gzip_proxied    any;
        gzip_types      text/plain text/html text/css application/xml application/javascript te

<------>#backend site
<------>proxy_pass https://mysite..local;
<------>proxy_intercept_errors on;
<------>#ERRORS
<------>error_page 403 404 /non_critical_error.html;
<------>error_page 500 503 /critical_error.html;
    }

<------>location /non_critical_error.html {
<------>    #internal;
<------>    return 301 https://mysite.com;
    }
<------>location /critical_error.html {
<------>    #internal;
<------>    return 301 http://mysite2.com;

    }

<------>#SSL
        ssl_certificate     /etc/nginx/crt/mysite.crt;
        ssl_certificate_key /etc/nginx/crt/mysite.key;
        ssl_protocols       TLSv1.2;
        ssl_ciphers         HIGH:!aNULL:!MD5;

<------>#LOGS
        access_log /var/log/nginx/mysite_ssl_access.log;
        error_log /var/log/nginx/mysite_ssl_error.log error;


}
#HTTPS REDIRECT
server {

        listen 80;

        server_name mysite.com;
        return 301 https://mysite.com;

        access_log /var/log/nginx/mysite_access.log;
        error_log /var/log/nginx/mysite_error.log error;

imsystem ()