我正在努力使我的反向代理按预期工作……我的 Apache 实例应作为后端应用程序服务器的反向代理工作,如下面的 proxypass/proxyreverse 指令中指定的那样。期望的行为是:客户端请求https://my_website/context_path
。此请求应重定向到http://my_backend/context_path/loginServlet
所有其他请求都应反向代理到后端服务器。
RewriteEngine on
RewriteCond "%{REQUEST_URI}" "https://my_website/context_path"
RewriteRule ^/my_website$ http://my_backend/context_path/loginServlet$1
ProxyPass /my_website/ http://my_backend/context_path/
ProxyPassReverse /my_website/ http://my_backend/context_path/
任何帮助都值得感激。提前致谢。
答案1
嗯...你确定要将所有登录重定向到后端直接提供的纯 HTTP 页面吗?你的后端服务器可以从外部访问吗?如果可以,那么可以:
<VirtualHost *:443>
ServerName my_website.example.com
...
RedirectMatch "^/context_path$" "http://my_backend.example.com/context_path/loginServlet"
ProxyPass /context_path/ http://my_backend.example.com/context_path/
ProxyPassReverse /context_path/ http://my_backend.example.com/context_path/
</VirtualHost>
但我认为您实际上正在尝试实现这一点;重定向到您的代理而不是后端:
<VirtualHost *:443>
ServerName my_website.example.com
...
RedirectMatch "^/context_path$" "/context_path/loginServlet"
ProxyPass /context_path/ http://my_backend.example.com/context_path/
ProxyPassReverse /context_path/ http://my_backend.example.com/context_path/
</VirtualHost>
请注意我使用了RedirectMatch
来自 mod_alias 而不是RewriteRule
mod_proxy,因为它对于这种简单的外部重定向已经足够,并且可能更容易理解。