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