Apache 2.4 RequestHeader, в то время как обратное проксирование с ProxyPass

Я использую Ubuntu 14.04 и имею несколько Apache HTTP VirtualHosts, слушающий на порте 80. Один сайт является обратным проксированием для приложения, слушающего на localhost. Apache настроили Основную аутентификацию для корневого местоположения на том сайте.

Вот апачская конфигурация:

<VirtualHost *:80>
        DocumentRoot /home/korisnik/site
        Alias /static /home/korisnik/site/static
        <Directory /home/korisnik/site/static>
          Require all granted
        </Directory>

        ProxyPass /static !
        ProxyPass / http://127.0.0.1:9002/
        ProxyPassReverse / http://127.0.0.1:9002/

        RequestHeader set X-Proxy-USER %{REMOTE_USER}e  #
        RequestHeader set X-Proxy-SECURE-USER %{REMOTE_USER}s
        RequestHeader set X-Foo "Bar"

        <Location />
          AuthType Basic
          AuthName "Authentication Required"
          AuthUserFile "/home/korisnik/htpasswd"
          Require valid-user
        </Location>
</VirtualHost>

Моя цель состоит в том, чтобы передать, аутентифицировал имя пользователя пользователя в приложении бэкенда через огибающую переменную, и это работало над одним сервером, которому включили модуль SSL в Apache, в то время как на другом сервере та же конфигурация дала огибающую установленную в NULL переменную HTTP_X_PROXY_REMOTE_USER. Единственной разнице между серверами включили модуль SSL.

В документации (http://httpd.apache.org/docs/current/mod/mod_headers.html) говорится это

RequestHeader set X-VARNAME %{VARNAME}e

должен использоваться на nonSSL, в то время как это на сайтах рабочий SSL

RequestHeader set X-VARNAME %{VARNAME}s

Вот сценарий PHP, который я использую для дампа заголовков:

<?php
        print "REMOTE_USER: ".$_SERVER['REMOTE_USER']."\n";
        print "HTTP_X_PROXY_USER: ".$_SERVER['HTTP_X_PROXY_USER']."\n";
        print "HTTP_X_PROXY_SECURE_USER: ".$_SERVER['HTTP_X_PROXY_SECURE_USER']."\n";
        print "HTTP_X_FOO: ".$_SERVER['HTTP_X_FOO']."\n";
?>

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

Заголовки с включенным Apache2 mod_ssl и прохождение через запроса ProxyPass

REMOTE_USER: 
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: korisnik
HTTP_X_FOO: Bar

Заголовки с включенным Apache2 mod_ssl и запрос, идущий прямо к php файлу, без ProxyPass

REMOTE_USER: korisnik
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: korisnik
HTTP_X_FOO: Bar

Заголовки с отключенным Apache2 mod_ssl и прохождение через запроса ProxyPass

REMOTE_USER: 
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: (null)
HTTP_X_FOO: Bar

Заголовки с отключенным Apache2 mod_ssl и запрос, идущий прямо к php файлу, без ProxyPass

REMOTE_USER: korisnik
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: (null)
HTTP_X_FOO: Bar

Я пропускаю что-то, или Apache отказывается устанавливать REMOTE_USER RequestHeader для соединений позади директивы Прокси, в то время как модуль SSL отключен?

2
задан 23 September 2014 в 11:28
1 ответ

Проблема, похоже, в том, что удаленный пользователь недоступен через "% {REMOTE_USER} e" на этапе обработки URL-адреса, на котором оценивается директива Header. Согласно документации RewriteRule:

Например, для перезаписи в соответствии с переменной REMOTE_USER из контекста сервера (файл httpd.conf), вы должны использовать% {LA-U: REMOTE_USER} - эта переменная устанавливается фазы авторизации, которые идут после фазы трансляции URL (во время которой работает mod_rewrite).

Я предполагаю, что это не удается с директивой заголовка по аналогичным причинам. Я не знаю, почему он внезапно становится доступным по SSL через "% {REMOTE_USER} s" , но опять же, я предполагаю, что это происходит потому, что удаленный пользователь установлен на более ранней стадии, когда связь осуществляется через SSL.

Однако у меня есть решение вашей проблемы. Вы можете использовать RewriteRule для упреждающего просмотра в соответствии с документацией, чтобы получить удаленного пользователя и затем соответствующим образом установить заголовок.

RewriteEngine On
RewriteRule ^ - [E=MY_REMOTE_USER:%{LA-U:REMOTE_USER}]
RequestHeader set X-Proxy-USER %{MY_REMOTE_USER}e
2
ответ дан 3 December 2019 в 11:41

Теги

Похожие вопросы