Я использую 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';
}
Тем не менее, лучший (и, как правило, более безопасный) вариант - делать это с помощью внеполосных методов, таких как переданные переменные среды.