我有一个 Web 应用程序可以处理需要更公开地公开的潜在敏感信息。不幸的是,它有自己的内置不支持 SSL 的专有网络服务器。由于软件审批过程,我不得不使用 Apache 作为反向代理。
我几乎完全可以正常工作,直接通过 SSL 访问任何页面都可以正常工作,但是网络服务器发送的重定向不会被重写。例如,当您未登录时尝试访问根 URL https://frontend.example.tld:4000/应该将您重定向到https://frontend.example.tld:4000/login但它会重定向到http: //frontend.example.tld:4000/login导致 BadRequest。
我在这方面所做的所有谷歌搜索都揭示了 apache2 中似乎不再可用的过时设置,建议更改代理后面的应用程序来处理它(不幸的是,这不是一个选项)。
这是我的 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>
在其他地方我加载了 proxy 和 proxy_http 模块。
更新:
以下是尝试重定向后收到的错误消息的内容:
错误的请求
您的浏览器发送了该服务器无法理解的请求。原因:您正在向启用 SSL 的服务器端口发送纯 HTTP。请改为使用 HTTPS 方案访问此 URL。提示: https://frontend.example.tld/