Re: Переменная $https
Валентин Бартенев
vbart at nginx.com
Mon Aug 5 17:52:12 UTC 2013
On Monday 05 August 2013 21:15:21 Nick Knutov wrote:
> В нгинх -
>
> $https
> “on” если соединение работает в режиме SSL, либо пустая строка
>
> А вот в апаче -
>
> HTTPS
> Will contain the text "on" if the connection is using SSL/TLS, or "off"
> otherwise.
>
> Вопрос - почему в нгинх сделано так, правильно ли это и не стоит ли
> поменять поведение этой переменной на как в апаче?
Предназначение этой переменной - служить конфигурацией по умолчанию для
fastcgi, и других *cgi протоколов.
Вы же, по-видимому, цитируете документацию по mod_rewrite. Для подобных
задач в nginx всегда была переменная $scheme, гораздо более удобная на
мой взгляд, чем апачевская HTTPS.
Переменная $https появилась не так давно, тогда данный вопрос был тщательно
изучен, и была выбрана реализация, совместимая с максимальным количеством
приложений.
В частности, в документации по PHP написано:
'HTTPS'
Set to a non-empty value if the script was queried through the
HTTPS protocol.
@ http://php.net/manual/en/reserved.variables.server.php
и не малое количество PHP кода написано так, что любое непустое значение
в $_SERVER['HTTPS'] включая 'off' будет истолковано как положительное.
Собственно одной из причин появления этой переменной послужили такие
письма: http://mailman.nginx.org/pipermail/nginx/2011-September/029424.html
Когда речь заходит о переменной окружения HTTPS (а не переменной HTTPS в
модуле mod_rewrite), то Apache в этом месте ведет себя так:
Apache + PHP
Apache/2.2.21
mod_php 5.3.8
https: HTTPS == "on"
http: HTTPS отсутствует
Apache + mod_fastcgi + flup (Python)
Apache/2.2.21
mod_fastcgi 2.4.7
flup-1.0.2
https: HTTPS == "on"
http: HTTPS отсутствует
Делайте выводы.
--
Валентин Бартенев
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru