Apache-2.2

Apache ajp 反向代理將特定頁面重定向到 https

  • March 6, 2012

我有執行和重定向到後端tomcat伺服器的apache負載平衡反向代理。我還為HTTPS (SSL) 創建了一個單獨的虛擬主機以及HTTP虛擬主機。以下**http://my.domain.net/>**和**<https://my.domain.net/**虛擬主機都可以單獨訪問並正常工作。mod_proxy_ajp

http ##:

&lt;VirtualHost *:80&gt;
ServerName my.domain.net

ProxyRequests On
ProxyVia On
ProxyPreserveHost On
ProxyErrorOverride On
ProxyStatus On

&lt;Proxy balancer://ClusterDomain&gt;
   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
&lt;/Proxy&gt;

ProxyPass /errors !
ProxyPass /balancer-manager !
ProxyPass / balancer://ClusterDomain/ nofailover=off
ProxyPassReverse / balancer://ClusterDomain/


# Balancer-manager for ajp proxy nodes management
&lt;Location /balancer-manager&gt;
       SetHandler balancer-manager
       Order deny,allow
       Allow from all
&lt;/Location&gt;

#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

&lt;/VirtualHost&gt;

https ## :

NameVirtualHost 123.123.123.123:443
&lt;VirtualHost 123.123.123.123:443&gt;
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

&lt;Proxy balancer://ClusterDomain&gt;
   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
&lt;/Proxy&gt;

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

&lt;/VirtualHost&gt;

如果有人已經問過這個問題但沒有找到,我在**SF中進行了搜尋。**他們中的大多數人詢問如何完全從 http 重定向到 https,但在我的情況下,它有點不同,因為我只希望將特定頁面重定向到安全頁面,但在嘗試使用 http 時它不應該完全重定向到 https。

如何根據上述虛擬主機將特定的 http 頁面(讓http://my.domain.net/register)重定向到安全的 https(https://my.domain.net/register )頁面?是否可以使用 ajp 代理?我需要在單獨訪問時同時訪問 http 和 https,但只有特定頁面應該被強制重定向到安全頁面。我可以這樣做嗎?

更新 1

我真的很不擅長理解 apache 重寫規則!!!。

正如KM01我嘗試重寫規則所建議的那樣。

即使在虛擬主機中附加以下規則以進行 https 重定向後,只需在訪問http://my.domain.net/register時重定向到http頁面即可簡單地忽略規則。

rewrite規則,

RewriteRule ^/register/$ https://my.domain.net/register [R=301]

(或者)

我也試過Redirect

RedirectMatch ^/register/$ https://my.domain.net/register

更新 2

經過一段時間的嘗試,有了一些基本的想法!

我得到了兩個rewriteredirect工作!關鍵是從代理重定向中排除頁面(/註冊),應該重定向到安全的 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!!!

您可以通過重寫/重定向來實現您想要做的事情。在你的虛擬主機配置中這樣的東西應該​​可以工作(請先在測試伺服器中測試,然後再投入生產):

#requires mod_rewrite
RewriteRule ^/register$ https://my.domain.com/register [R=301]

這條規則說只重定向那些開始(^)和結束($)以及介於兩者之間的內容/register。這不會重定向任何其他路徑,只是這個。

高溫高壓

引用自:https://serverfault.com/questions/366511