我有Apache 负载平衡反向代理运行mod_proxy_ajp
并重定向到后端雄猫服务器。我还为HTTPS(SSL)以及HTTP虚拟主机。以下两个http://my.domain.net/和https://my.domain.net/虚拟主机可以单独访问并且运行良好。
http ##:
<VirtualHost *:80>
ServerName my.domain.net
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
ProxyErrorOverride On
ProxyStatus On
<Proxy balancer://ClusterDomain>
Order deny,allow
Allow from all
BalancerMember ajp://192.168.1.22:8009 route=web1 redirect=web2 ttl=300 timeout=5 retry=60
BalancerMember ajp://192.168.1.23:8009 route=web2 redirect=web1 ttl=300 timeout=5 retry=60
BalancerMember ajp://192.168.1.21:8009 route=balancer1 status=+H disablereuse=on
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /errors !
ProxyPass /balancer-manager !
ProxyPass / balancer://ClusterDomain/ nofailover=off
ProxyPassReverse / balancer://ClusterDomain/
# Balancer-manager for ajp proxy nodes management
<Location /balancer-manager>
SetHandler balancer-manager
Order deny,allow
Allow from all
</Location>
#Recording virtual host logs
LogLevel Debug
CustomLog /var/log/apache2/my.domain.com-access.log combined
ErrorLog /var/log/apache2/my.domain.com-error.log
</VirtualHost>
https ##:
NameVirtualHost 123.123.123.123:443
<VirtualHost 123.123.123.123:443>
ServerName my.domain.net
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /etc/ssl/myapp/server.crt
SSLCertificateKeyFile /etc/ssl/myapp/server.pem
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
ProxyErrorOverride On
ProxyStatus On
<Proxy balancer://ClusterDomain>
Order deny,allow
Allow from all
BalancerMember ajp://192.168.1.22:8009 route=web1 redirect=web2 ttl=300 timeout=5 retry=60
BalancerMember ajp://192.168.1.23:8009 route=web2 redirect=web1 ttl=300 timeout=5 retry=60
BalancerMember ajp://192.168.1.21:8009 route=balancer1 status=+H disablereuse=on
ProxySet lbmethod=byrequests
ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /errors !
ProxyPass / balancer://ClusterDomain/ nofailover=off
ProxyPassReverse / balancer://ClusterDomain/
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
我搜索过旧金山如果有人已经问过这个问题但没有找到。他们中的大多数人问如何完全从 http 重定向到 https,但就我而言,情况有点不同,因为我只希望将特定页面重定向到安全页面,但尝试使用 http 时不应完全重定向到 https。
如何重定向特定的 http 页面(让http://my.domain.net/register) 到安全的 https(https://my.domain.net/register) 页面?我的情况是基于上述虚拟托管的吗?是否可以使用 ajp 代理?我需要在单独访问时同时访问 http 和 https,但只有特定页面应强制重定向到安全页面。我可以这样做吗?
更新 1
我真的非常不理解 apache 重写规则!!!。
按照建议,KM01
我尝试重写规则。
只需重定向到即可忽略规则http访问时的页面http://my.domain.net/register即使在虚拟主机中附加了以下用于 https 重定向的规则。
rewrite
规则,
RewriteRule ^/register/$ https://my.domain.net/register [R=301]
(或者)
我也尝试过Redirect
RedirectMatch ^/register/$ https://my.domain.net/register
更新 2
尝试了一段时间后有了一些基本的想法!
我得到了两者rewrite
并且redirect
正在工作!关键是将页面(/register)从代理重定向中排除,该页面应重定向到安全的 https 页面!
首先Redirect
以这种方式工作,
ProxyPass /register !
RedirectMatch /register https://my.domain.net/register
#(or) RedirectMatch permanent /register https://my.domain.net/register
和Rewrite
,
即使/register
从代理中排除也对我不起作用。我不得不启用RewriteEngine on
重写模块。
附加以下内容有效,
ProxyPass /register !
RewriteEngine on
RewriteRule ^/register/$ https://my.domain.net/register [R=301]
我不知道这是不是正确的做法,但已经成功了KV01的帮助
感谢 KV01!!!
答案1
您可以使用重写/重定向来实现您想要做的事情。您的 vhost 配置中的类似内容应该可以工作(请先在测试服务器中进行测试,然后再投入生产):
#requires mod_rewrite
RewriteRule ^/register$ https://my.domain.com/register [R=301]
此规则表示仅重定向以 开始(^
)和 结束($
)且中间包含 的路径/register
。这不会重定向任何其他路径,只会重定向此路径。
高血压