у меня есть обратный прокси-сервер с балансировкой нагрузки apache с участием mod_proxy_ajp
запуск и перенаправление на бэкэнд Кот серверы. Я также создал отдельный виртуальный хост для HTTPS(SSL) вместе с HTTP виртуальный хостинг. Оба ниже http://my.domain.net/ и https://my.domain.net/ виртуальные хосты доступны и работают нормально индивидуально.
<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>
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>
Я искал в SF если кто-то уже задавал этот вопрос, но не нашел. Большинство из них спрашивали, как полностью перенаправить с http на https, но в моем случае это немного отличается, так как я хочу, чтобы только определенные страницы были перенаправлены на защищенную страницу, но он НЕ должен полностью перенаправлять на https при попытке с http.
Как перенаправить определенную http-страницу (пусть http://my.domain.net/register) на защищенный https (https://my.domain.net/register) в моем случае на основе указанного выше виртуального хостинга ?. Можно ли сделать с прокси ajp ?. Мне нужны как http, так и https, доступные при доступе по отдельности, но только определенная страница должна быть принудительно перенаправлена на защищенную страницу. Могу я это сделать?
Я действительно очень плохо понимаю правила перезаписи 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
После некоторых попыток возникли основные мысли!
У меня есть оба 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 !!!
Вы можете добиться того, что пытаетесь сделать, с помощью перезаписи / перенаправления. Что-то вроде этого в вашей конфигурации vhost должно работать (сначала проверьте на тестовом сервере, прежде чем переходить к производству):
#requires mod_rewrite
RewriteRule ^/register$ https://my.domain.com/register [R=301]
В этих правилах сказано, что перенаправлять только то, что запускается (^
) и заканчивается ($
) и между ними содержит /register
. Это не приведет к перенаправлению любого другого пути, только этого.
HTH