Назад | Перейти на главную страницу

Переменная HTTPS в $ _SERVER с использованием nginx в качестве обратного прокси

Я использую nginx как обратный прокси перед apache с mod_php. Мой сайт находится на https, и для правильной сборки некоторых ссылок требуется, чтобы переменная $ _SERVER ['HTTPS'] была включена. Мой сайт находится на drupal, поэтому нельзя исправить код и проверить другую переменную при принятии решения о том, работает ли сайт под https.

Есть ли способ решить проблему только с помощью настройки конфигурации nginx или apache?

Я обнаружил, что другие люди задают похожие вопросы, но я не нашел ни подходящего мне решения, ни четкого заявления о том, что то, что я хочу, невозможно.

(например.: Переменная HTTPS server / php недоступна, Nginx: убрать заголовок по HTTP, добавить заголовок по HTTPS)

Вы можете использовать директиву SetEnv HTTPS "on" в основной конфигурации Apache или в .htaccess, чтобы безоговорочно установить требуемую переменную.

Или лучше - устанавливайте только в том случае, если адрес клиента совпадает с адресом веб-интерфейса Nginx. В этом случае переменная не будет установлена, если клиенты запрашивают Apache напрямую без SSL:

SetEnvIf Remote_Addr "NGINX_IP_ADDRESS" HTTPS=on

Также стоит отметить: ничто не мешает вам (а документация модуля securepages даже рекомендует это в некоторых случаях) от редактирования вашего settings.php включить такой блок:

$headers = @apache_request_headers();
$real_client_ip  = ($headers === NULL ? $_SERVER['HTTP_X-Forwarded-For'] : $headers["X-Forwarded-For"] );
if ( $real_client_ip == '1.2.3.4' ) {
    $_SERVER['HTTPS'] = 'on';
}

Тем не менее, лучший (и, как правило, более безопасный) вариант - делать это с помощью внеполосных методов, таких как переданные переменные среды.