Однако, решение оказалось достаточно простое.
Проблема заключается в том, что для определения протокола могут быть использованы переменные
$_SERVER['HTTPS'] $_SERVER['HTTP_SCHEME'] $_SERVER['HTTP_X_FORWARDED_PROTO']И косвенно
$_SERVER['SERVER_PORT']Но все эти переменные, кроме номера порта почти наверняка будут отсутствовать.
Определять http-схему основываясь только на номере порта -- приемлемое, но не очень гибкое решение.
Я сделал так:
$scheme = isset($_SERVER['HTTP_SCHEME']) ? $_SERVER['HTTP_SCHEME'] : ( ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || 443 == $_SERVER['SERVER_PORT'] ) ? 'https' : 'http' );
И для надежности, что бы $_SERVER['HTTP_SCHEME'] была определена, в nginx.conf добавил строчку
# for SSL fastcgi_param HTTP_SCHEME $scheme;
Комментариев нет:
Отправить комментарий