Estou usando o Ubuntu 14.04 e tenho vários VirtualHosts Apache HTTP escutando na porta 80. Um site é o proxy reverso para escutar aplicativos em localhost. O Apache tem a autenticação Básica configurada para a localização raiz no site.
Aqui está a configuração do 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>
Meu objetivo é passar o nome de usuário do usuário autenticado para o aplicativo backend via variável ENV, e isso funcionou em um servidor que tinha módulo SSL ativado no Apache, enquanto em outro servidor a mesma configuração deu a variável ENV HTTP_X_PROXY_REMOTE_USER definida como null. A única diferença entre os servidores foi ativada no módulo SSL.
A documentação ( link ) diz que
RequestHeader set X-VARNAME %{VARNAME}e
deve ser usado em nonSSL, enquanto isso em sites que executam SSL
RequestHeader set X-VARNAME %{VARNAME}s
Aqui está o script php que uso para descartar cabeçalhos:
<?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";
?>
Descobri que, embora o SSL esteja desativado, nenhuma dessas diretivas funciona. Quando o SSL está ativado, a segunda diretiva funciona sem qualquer outra alteração, como ativar o SSL nesse site ou ativar o SSL em qualquer outro site.
Cabeçalhos com Apache2 mod_ssl habilitado e solicitação passando por ProxyPass
REMOTE_USER:
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: korisnik
HTTP_X_FOO: Bar
Cabeçalhos com o mod_ssl do Apache2 habilitado e pedido direto para o arquivo php, sem ProxyPass
REMOTE_USER: korisnik
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: korisnik
HTTP_X_FOO: Bar
Cabeçalhos com o Apache2 mod_ssl desativado e pedido passando por ProxyPass
REMOTE_USER:
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: (null)
HTTP_X_FOO: Bar
Cabeçalhos com o Apache2 mod_ssl desativado e requisitado diretamente para o arquivo php, sem ProxyPass
REMOTE_USER: korisnik
HTTP_X_PROXY_USER: (null)
HTTP_X_PROXY_SECURE_USER: (null)
HTTP_X_FOO: Bar
Estou faltando alguma coisa, ou o Apache está se recusando a configurar o RequestHeader REMOTE_USER para conexões por trás da diretiva Proxy enquanto o módulo SSL está desativado?