Re: Проблема с редиректом http на https.

Sergey Shepelev temotor at gmail.com
Thu Jul 2 14:47:10 MSD 2009


Если человек набрал в адресной строке http://domain он
*гарантированно* попадает на фронтенд на 80 порту.
Если человек набрал в адресной строке https://domain он
*гарантированно* попадает на фронтенд на 443 порту.

Фронтенд это то, что снаружи принимает соединения юзеров.

Если вы хотите чтобы http редиректилось на https, то вам надо повесить
свой "фронтенд" с 80 на другой порт и сделать фронтендом вот такой
server {
listen addr;
rewrite ^ https://domain$request_uri permanent;
}

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

2009/7/2 LinCore <dvl.lincore at gmail.com>:
> Преветствую Генадий,
>
> Как в таком случае можно оргонизовать редиерк в случае если человек ошибочно
> набрал в адрессной строке http вместо https?
>
> Но основное условие это чтобы фронтэнд был не на 80 или 443 порту(они заняты
> уже).
>
> 2009/7/1 Gena Makhomed <gmm at csdoc.com>
>>
>> On Tuesday, June 30, 2009 at 18:48:12, LinCore wrote:
>>
>> L> Возникла необходимость сделать ssl бэкэнд с фонтэндом на основе
>> L> nginx, но используя нестандартный порт (например 8081).
>>
>> L> Пример конфигурационого фаила:
>> L> cat nginx.conf
>>
>> L>  server {
>>
>> L>     listen       some_ip:8081;
>>
>> L>     server_name some_name_tld;
>>
>> L>     ssl          on;
>>
>> L>     rewrite ^ https://$server_name:$server_port$request_uri redirect;
>>
>> [...]
>>
>> L> И в такой конфигурации редирект который я использую не работает,
>> L> причем если фронтэнд повесить на 80 порт то всё начинает работать как
>> надо.
>>
>> если в конфигурации написано listen some_ip:8081; ssl on;
>> - то это уже "http over ssl". ничего редиректить не надо.
>>
>> если попробовать обратиться по http-протоколу на https порт,
>> http://example.com:443/ то nginx вернет сообщение об ошибке:
>>
>> ==============================================
>>
>> 400 Bad Request
>>
>> The plain HTTP request was sent to HTTPS port
>>
>> ==============================================
>>
>> поэтому для plain http нужно выделять отдельный порт,
>> например, так: 80 - plain http, 443 - http over ssl.
>>
>> --
>> Best regards,
>>  Gena
>>
>>
>
>


More information about the nginx-ru mailing list