使用mod_proxy整合
1否纬、開啟Apache的代理功能
#LoadModule proxy_module modules/mod_proxy.so
2盖袭、開啟Apache代理Tomcat的協(xié)議仍秤,可以是AJP協(xié)議熄诡、Http協(xié)議等
#LoadModule proxy_http_module modules/mod_proxy_http.so
Apache的代理有兩種方式,Reverse方式和Forward方式诗力。Forward方式需要在客戶端進(jìn)行配置以利用代理服務(wù)器獲取目標(biāo)內(nèi)容凰浮,F(xiàn)orward方式的一種常見場(chǎng)景就是我們的內(nèi)網(wǎng)機(jī)器都無法連接外網(wǎng),但是其中有一臺(tái)可以連接苇本,然后我們?cè)诳梢赃B接外網(wǎng)的機(jī)器上搭建一個(gè)代理袜茧,讓其它內(nèi)網(wǎng)機(jī)器都通過該代理來訪問外部網(wǎng)絡(luò)。Reverse方式就無需在客戶端進(jìn)行配置了圈澈,客戶端請(qǐng)求的目標(biāo)地址是直接對(duì)應(yīng)Reverse代理的惫周,然后由Reverse代理在內(nèi)部決定請(qǐng)求哪個(gè)真實(shí)的地址。本文將主要講解Reverse代理方式康栈。
首先去掉httpd.conf文件中如下內(nèi)容前的“#”號(hào)递递,以將Virtual Host的配置包含在Apache服務(wù)器的配置文件中,然后我們就可以在httpd-vhosts.conf文件中進(jìn)行Virtual Host的配置了啥么。
#Include conf/extra/httpd-vhosts.conf
然后登舞,我們?cè)赾onf/extra/httpd-vhosts.conf文件中添加如下內(nèi)容,其表示我們定義了一個(gè)虛擬主機(jī)悬荣,該虛擬主機(jī)將接收任何請(qǐng)求菠秒。
<VirtualHost *:80>
ProxyPass "/" "http://localhost:8080/" max=300
ProxyPassReverse "/" "http://localhost:8080/"
</VirtualHost>
上述的指令ProxyPass是用來映射代理的路徑的,其語法是:
ProxyPass path !|url [key=value[key=value…]]
其中path表示Apache請(qǐng)求的相對(duì)路徑氯迂,而“!”則表示不對(duì)該路徑進(jìn)行代理践叠,url則表示需要代理的路徑,后面的key=value表示需要指定的參數(shù)嚼蚀。在我們的示例中就是使用根路徑“/”代理本地8080端口的根路徑“/”禁灼,然后參數(shù)max表示同時(shí)最多允許300個(gè)對(duì)后臺(tái)代理服務(wù)的并發(fā)請(qǐng)求。關(guān)于ProxyPass的更多信息請(qǐng)參考http://httpd.apache.org/docs/2.4/zh-cn/mod/mod_proxy.html#proxypass轿曙。
指令ProxyPassReverse是用來對(duì)后臺(tái)代理應(yīng)用返回過來的Response Header中的URL進(jìn)行轉(zhuǎn)換的弄捕,使其能夠以Apache的形式正確的展示僻孝。比如請(qǐng)求后臺(tái)服務(wù)后需要重定向到http://localhost:8080/examples則通過ProxyPassReverse指令進(jìn)行轉(zhuǎn)換后將會(huì)把重定向地址改為http://localhost/examples。
這個(gè)時(shí)候我們?cè)?080端口啟動(dòng)Tomcat守谓,然后在80端口啟動(dòng)Apache穿铆,之后我們所有對(duì)80端口的請(qǐng)求都將由Apache代理請(qǐng)求到8080端口的Tomcat應(yīng)用。
如下這樣的配置就表示不對(duì)“/examples”路徑進(jìn)行代理斋荞,此時(shí)訪問“/examples”時(shí)將去Apache自己的路徑下尋找對(duì)應(yīng)的資源荞雏。
<VirtualHost *:80>
ProxyPass "/examples" "!"
ProxyPass "/" "http://localhost:8080/" max=300
ProxyPassReverse "/" "http://localhost:8080/"
</VirtualHost>
此時(shí)如果你在瀏覽器里面訪問http://localhost/examples時(shí)會(huì)得到一個(gè)403頁面,原因是Apache默認(rèn)會(huì)禁止對(duì)根目錄以外的路徑的訪問平酿。此時(shí)讯檐,我們需要找到httpd.conf文件中的如下內(nèi)容:
<Directory />
AllowOverride none
Require all denied
</Directory>
并將其修改為如下內(nèi)容:
<Directory />
AllowOverride none
Order Deny,ALlow
Allow from All
</Directory>