Apache ajp 反向代理将特定页面重定向到 https

Apache ajp 反向代理将特定页面重定向到 https

我有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。这不会重定向任何其他路径,只会重定向此路径。

高血压

相关内容