天天看點

利用Apache的轉發子產品實作反向代理伺服器

問題又來

公司的LAMP伺服器使用Apache的VirtualHost功能部署了多個擁有獨立域名的網站。httpd.conf配置檔案部分如下:

# 省略本文無關部分

Listen 80

# www.xxx.com

<VirtualHost *>

    ServerAdmin [email protected]

    DocumentRoot "/var/www/xxx"

    ServerName www.xxx.com

</VirtualHost>

# www.yyy.com

<VirtualHost *>

    ServerAdmin [email protected]

    DocumentRoot "/var/www/yyy"

    ServerName yyy.com

    ServerAlias www.yyy.com

</VirtualHost>

# 省略其他網站配置

可見,Apache偵聽在80端口上,并依據域名來分發請求到不同的網站目錄。

今天,公司決定在這個伺服器上增加一個網站,該網站擁有獨立域名zzz.com,使用JavaEE開發,基于Tomcat運作。

由于已經有Apache偵聽80端口,是以獨立運作的Tomcat必然無法再偵聽這個端口。而客戶要求必須以http://www.zzz.com的形式通路網站,而不能是http://www.zzz.com:8080。是以必須把Tomcat內建到Apache下面。

解決思路

要把Tomcat網站內建到Apache中,主要方式有兩種。一是通過AJP協定,把Tomcat作為Apache的worker;二是使用mod_proxy和mod_proxy_http子產品轉發請求至Tomcat。

第一種方式,應該效率高,畢竟Tomcat也是Apache家的産品,內建起來相當穩定容易。 

第二種方式,通用性強,不僅可以轉發到Tomcat,還可以轉發到任意的HTTP伺服器程式,如IIS,另外的Apache執行個體。

根據個人愛好,我選擇了第二種方式。

解決方案

首先讓Tomcat偵聽8080端口。

然後修改httpd.conf。

# 加載轉發子產品

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

# 把對zzz.com的通路全部轉發給Tomcat

<VirtualHost *>

    ServerAdmin [email protected]

    ServerName zzz.com

    ServerAlias www.com

    ProxyPass / http://localhost:8080/

    ProxyPassReverse / http://localhost:8080/

</VirtualHost>

這樣當使用者通路 http://www.zzz.com的時候,Apache就會代替使用者進而通路http://localhost:8080,并把取回的http資料再轉發給使用者。這也就是Apache的逆向代理功能,這個代理的過程對浏覽器客戶來說是不可感覺的,某種程度上也保護和隐藏了Tomcat服務(因為Apache是通過内網http://127.0.0.1:8080通路Tomcat服務的,http://www.zzz.com:8080對外部網際網路并不可見)。

與逆向代理(Reverse Proxy)相對應的是Apache的正向代理(Forward Proxy)功能,它需要浏覽器端設定代理伺服器。

将來擴充

這種方案其實具有很強的擴充性,對于缺少公網IP的Web伺服器來說非常有意義。比如将來某天還需要部署一個基于IIS的網站。該網站域名為 aaa.com,運作在一個内網Windows機器上,IP位址為172.16.35.220,IIS偵聽在80端口上。那麼就可以通過Apache的逆向代理功能來部署。

<VirtualHost *>

    ServerAdmin [email protected]

    ServerName aaa.com

    ServerAlias www.aaa.com

    ProxyPass / http://172.16.35.220/

    ProxyPassReverse / http://172.16.35.220/

</VirtualHost>

這樣當使用者通路http://www.aaa.com的時候,Apache就會從http://172.16.35.220/上讀取資料并轉發結果給使用者。

--------------------- 

作者:smstong 

來源:CSDN 

原文:https://blog.csdn.net/smstong/article/details/48976333 

版權聲明:本文為部落客原創文章,轉載請附上博文連結!