Eu tenho um aplicativo da web que lida com informações potencialmente confidenciais que precisam ser expostas mais publicamente. Infelizmente, ele tem seu próprio servidor web integrado que não suporta SSL. Devido também um processo de aprovação de software, eu tenho que usar o Apache como proxy reverso.
Eu tenho quase que inteiramente trabalhando, acessando diretamente qualquer página sobre SSL funciona perfeitamente, mas redirecionamentos enviados pelo servidor não estão sendo reescritos. Por exemplo, tentar acessar o URL raiz link quando você não estiver logado deve redirecioná-lo para link mas em vez disso ele está redirecionando para o link que resulta em uma BadRequest.
Todos os Googling que fiz sobre isso revelaram configurações desatualizadas que parecem não estar mais disponíveis no apache2, estão sugerindo a mudança do aplicativo por trás do proxy para lidar com ele (o que infelizmente não é uma opção).
Aqui está a parte relevante da minha configuração do apache:
<IfModule mod_ssl.c>
Listen 4000
<VirtualHost *:4000>
ServerAdmin webmaster@localhost
ServerName frontend.example.tld
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel info
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:!EXPORT56:!EXP:!eNULL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2
SSLEngine on
SSLCertificateFile /etc/ssl/certs/frontend.crt
SSLCertificateKeyFile /etc/ssl/private/frontend.key
SSLCertificateChainFile /etc/ssl/certs/gd_bundle.crt
BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
</IfModule>
Em outro lugar, tenho o proxy e o módulo proxy_http carregados.
Atualização:
Aqui está o conteúdo da mensagem de erro recebida após o redirecionamento tentado:
Bad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please. Hint:
https://frontend.example.tld/