LINUX.ORG.RU

Как правильно настраивать редирект с http на https?

 , , ,


0

2

Многие статьи советуют делать это автоматически на сервере. Но насколько я помню, браузеры шлют заголовки о том нужно ли перенаправлять или нет, в таком случае, может правильно перенаправлять после того как сервер прочитает хедеры, хочет ли клиент перенаправления или нет, и только после этого перенаправлять?

Собственно, из спецификации следует, что принудительное перенаправление на сервере вообще не допустимо, сервер только может сообщить клиенту о том чтобы тот обращался по https в течении какого то времени

https://www.rfc-editor.org/rfc/rfc6797#section-6.1



Последнее исправление: newton1000 (всего исправлений: 1)
server {
    listen 80;
    server_name domain.ru;

    location / {
        proxy_pass http://A.B.C.D;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }

   listen 443 ssl;
   ssl_certificate /etc/letsencrypt/live/domain.ru/fullchain.pem; # managed by Certbot
   ssl_certificate_key /etc/letsencrypt/live/domain.ru/privkey.pem; # managed by Certbot

   if ($scheme != "https") {
       return 301 https://$host$request_uri;
   } # managed by Certbot

}

WEB-сервер будет всегда перенаправлять на SSL в данном конфиге.

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

Чтобы не писать кучу вопросов, ответ на которые есть в документации. И они, так сказать, базовые. Опять заблокируют, видимо. Бывает.

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

Какой то ты недалекий. Если хочешь отвечать на вопросы которые сам себе задаешь, создай отдельный топик для особо одаренных, а тут либо отвечай что спросили либо уйди

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

Какой то ты недалекий.

Кто бы говорил…

Ты задаёшь вопросы, на которые уже есть ответы, которые прописаны в документации к популярным веб-серверам. Эти веб-сервера работают так, чтобы любой клиент с ними мог работать.

Ты хочешь подстроиться под клиента (который подстраивается под сервер!), это бред.

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

Клиент никакие заголовки о редиректе на сервер не шлёт.

Более того, если на клиенте явно зарезаны редиректы, сервер об этом никогда не узнает.

@newton1000, подумой!

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

это неправда, клиент шлет заголовок

Даже если ты нашёл какой-то странный клиент, который это делает, покажи мне сервер, который их принимает.

И не забудь приложить ссылки на стандарты, без них твои утверждения ничего не стоят.

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

Клиент только обрабатывает то, что передаёт ему сервер и если в коде JS скрипта на стороне клиента прописано перейти на такую-то страницу, то это будет обработано браузером, на стороне клиента и далее клиент у сервера, который обрабатывает URL, на который совершён переход запросит страницу.

Клиент серверу ничего указать не может, на то он и сервер.

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

вот одна из спецификаций, основная для сервера.

Собственно, из этого следует, что принудительное перенаправление на сервере вообще не допустимо, сервер тольщко может сообщить клиенту о том чтобы тот обращался по https в течении какого то времени

https://www.rfc-editor.org/rfc/rfc6797#section-6.1

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

Он не может отказать, он может отказаться следовать. Именно хедера для отказа нет.

Вопрос-то в чём в итоге у тебя? Вот так правильно, да, стандартизированное перенаправление.


Браузер запрашивает страницу, как обычно. Сервер отвечает редиректом вместо 200. Это то, что тебе и нужно. Никаких специальных запросов браузера на редирект — нет.

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

А кроме того, там должно быть указано время в течении которого перенаправление действует. Браузер должен хранить это правило для домена в течении времени которое указано

newton1000
() автор топика
Ответ на: комментарий от kostik87

У тебя в вопросе полное непонимание. Клиент никакие заголовки о редиректе на сервер не шлёт.

SEO - это такая отрасль, по сравнению с которой магия вуду - стройная точная наука, не терпящая неопределённости и недосказанности. Не разговаривай с ним.

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

Перенаправление по стандарту, насколько я понял, представляет из себя ответ сервера, с просьбой чтобы клиент начиная с этого момента и в течении определенного времени обращался к нему по https протоколу на 443 порт. То есть перенаправление состоит из одного этого ответа, и больше ничего не нужно. Или что то еще?

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

представляет из себя ответ сервера

Location: https://www.aaa.seo

и статус 301. Остальное всё суета.

PS. HTTP/1.0 навсегда!

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

Ну сложно спорить, что польза человечеству от вуду выше, чем от SEO.

(Она и там и там отрицательная, но у SEO по модулю больше)

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

Ну ты определись, что ты хочешь. Вроде ж сам разобрался уже, а теперь как будто пытаешься сам себе что-то доказать. Хочешь жёстко https-only, делай жёсткий редирект, хочешь, чтобы сервер всё же отдавал и по http, делай так.

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

Конечно логично. Сервер отдаёт https. По http не отдаёт ничего. Но из соображений гуманности на двери налеплена бумажка с надписью: пошолнах^W пройдите вон туда, товарищи. Кому надо – тот пройдёт, кто не умеет https – ну штош, ему не повезло, а зачем нам неудачники?

А если отдаёт одно и то же и там и там – то зачем нам редирект?

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

Я хочу сделать по стандарту. Стандарт предписывает делать это либо по требованию клиента (клиент отправил заголовок upgrade-insecure-requests).

When a server encounters this preference in an HTTP request’s headers, it SHOULD redirect the user to a potentially secure representation of the resource being requested.

When a server encounters this preference in an HTTPS request’s headers, it SHOULD include a Strict-Transport-Security header in the response if the request’s host is HSTS-safe or conditionally HSTS-safe [RFC6797].

Допустим, если клиент не прислал этот заголовок, сервер может сам предложить Strict-Transport-Security Остается вопрос если клиент отправляет этот заголовок со значением 0 или false, тогда что делать?

newton1000
() автор топика
Ответ на: комментарий от sin_a

Я хз, я считаю что это действительно лишнее. Рассчитано на пользователей которые совсем не рубят в безопасности передачи данных, дескать клиент пошел по http но не осозновал последствий бла бла бла.

newton1000
() автор топика
Ответ на: комментарий от sin_a

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

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

rfc6797

Это только подтверждает моё утверждение. Не твоё. (%

принудительное перенаправление на сервере вообще не допустимо, сервер тольщко может сообщить клиенту о том чтобы тот обращался

А оно в принципе невозможно. Клиент обращается по адресу с редиректом, получает 30X с новой ссылкой, по которой он может пойти, а может не пойти — проблемы клиентов сервер не волнуют. При этом ответ сервера по старой ссылке не изменят никакие хедеры клиента.

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

А если клиент в Accept: пришлет application/ms-word чего делать будешь? Клиент идёт за контентом. Контент у сервера. Сервер отдает его на своих условиях. Сказал что контент перемещен на какую-то ссылку значит так оно и есть

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

В случае ответа сервера типа Strict-Transport-Security: max-age= клиент это запоминает.

Вопрос, собственно был в том, есть ли клиентские заголовки, которые регламентируют поведение сервера. Я сказал, да они есть, как минимум это upgrade-insecure-request

newton1000
() автор топика
Ответ на: комментарий от cobold

это похоже на обычное обслуживание, например в кафе. Заказываешь эспрессо, при этом допустимо сказать что его нет, но не допустимо отдавать то что клиент не заказывал.

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

В общем смысл ясен. Отдавать надо то что просят.

newton1000
() автор топика