I have apache load balancing reverse proxy with mod_proxy_ajp
running and redirecting to the backend tomcat servers. I have also created a separate virtual host for HTTPS(SSL) along with HTTP virtual hosting. Both the below http://my.domain.net/ and https://my.domain.net/ virtual hosts are accessible and working fine individually.
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>
I searched in SF if anybody already asked this question but didn't find. Most of them asked how to redirect completely from http to https but in my case it's a bit different as I want only specific page(s) to be redirected to secured page but it should NOT redirect to https completely when tried with http.
How do I redirect a specific http page(let http://my.domain.net/register) to secured https(https://my.domain.net/register) page in my case based on the above virtual hosting?. Is it possible to do with ajp proxy?. I need both http and https accessible when accessed individually but only specific page should be forcibly redirected to secured page. Could I do this?
Update 1
I am really very bad at understand apache rewrite rules!!!.
As suggested by KM01
I tried rewrite rules.
It's simple ignoring the rules just by redirecting to http page when accessed http://my.domain.net/register even after appending the following rules in the virtual hosting for https redirection.
rewrite
rule,
RewriteRule ^/register/$ https://my.domain.net/register [R=301]
(or)
I also tried with Redirect
RedirectMatch ^/register/$ https://my.domain.net/register
Update 2
After trying for a while got some basic thoughts!
I got both rewrite
and redirect
working!. The key thing was EXCLUDING the page(/register) from proxy redirection which should be redirected to secured https page!.
First Redirect
worked this way,
ProxyPass /register !
RedirectMatch /register https://my.domain.net/register
#(or) RedirectMatch permanent /register https://my.domain.net/register
And Rewrite
,
Even after excluding /register
from proxy didn't work for me. I had to use RewriteEngine on
though having rewrite module enabled.
Appending the following worked,
ProxyPass /register !
RewriteEngine on
RewriteRule ^/register/$ https://my.domain.net/register [R=301]
I don't know if this is the right way to do but got it working on KV01's help
Thanks to KV01!!!