window server(chapter one)--Proxy

前言:最近心情不太好,所以就來寫寫博客。之前一直想寫,怪自己太懶,趁現在還比較閒,就趕緊寫了。熱情沒了之後,我想我也不會再點開博客了。。說到服務器,“魯大師”說其實就是一部電腦。長篇大論的話百度上有的是,這裏我總結一下我自己所搭的服務器的方法和技巧。

一、tomcat+phpstudy(最新版支持php7的是2016版)

對於新手來說,直接下載集成了apache、mysql的phpstudy或者xxamp都是很機制的選擇。


二、.正向代理和反向代理

1 正向代理: 客戶端無法直接訪問外部的web,需要在客戶端所在的網絡內架設一臺代理服務器,客戶端通過代理服務器訪問外部的web(需要在客戶端的瀏覽器中設置代理服務器)
適用於: ①局域網的代理服務器(一般是網關,相當於squid的一般用法)
②訪問某個受限網絡的代理服務器,如教育網訪問某些國外網站需要找代理
2 反向代理: 客戶端能訪問外部的web,但是不能訪問目標web,目標web所在的網絡內一臺機器充當目標web的代理,客戶端直接訪問代理就像訪問目標web一樣(此代理對客戶端透明,即客戶端不用做如何設置,並不知道實際訪問的只是代理而已,以爲就是訪問的目標)
適用於: ①idc的某臺目標機器只對內開放web,外部的客戶端要訪問,就讓另一臺機器做proxy,外部直接訪問proxy即相當於訪問目標
②idc的目標機器的某個特殊的web服務跑在非正常端口如9000,而防火牆上只對外開放了80,此時可在80上做proxy映射到9000,外部訪問80即相當於9000
簡單示意圖如下
clip_image005
clip_image006
 
本例中
機器192.168.0.114是我們的reverse proxy server
apache/2.0.63運行在其80端口
上面有兩個域名的虛擬主機
www.a.org
www.b.org
要實現的效果是:
訪問 www.a.org 即相當於訪問另一臺機器192.168.0.115
訪問 www.b.org 即相當於訪問本機的9000端口

三.apache 整合 tomcat

方法一,使用 mod_jk。很多網站上介紹到 Apache HTTP server 和 Tomcat server 整合的時候,都是在介紹  mod_jk.so 的使用,這是一種比較老的方法,並且需要額外下載 mod_jk。Apache 和 Tomcat 的默認配置文件都需要改動。

方法二, URL rewrite,也就是對於指定格式的 URL,轉發給某個 Tomcat 的網址。這裏所說的指定格式,是指 Apache 所使用的正則表達式,通俗地將,是一種類似 * 的一種比較高級通配符。這種方法不需要下在額外的文件,只需要配置 Apache。

方法三,mod_proxy_ajp,僅在 Apache 2.1 及以後的版本中可用,Apache 自帶的一個新功能模塊。這時 Apache 使用 Apache JServ Protocol 與 Tomcat 通訊。不需要下在額外的文件,需要改動Apache 和 Tomcat 的默認配置文件都需要改動。

方法四,mod_proxy。其實 mod_proxy 既可以做類似於 Wingate 一樣的公司局域網共享上網代理,也可以做反向代理(Reverse proxy)。這裏使用的是反向代理功能,用戶端瀏覽器不需要把代理服務器改成這裏的 Apache 地址。mod_proxy 是 Apache 自帶功能,並且配置比較簡單。


這裏主要講解一下方法四(出於方便和安全角度)

一.apache中的參數問題

1、ProxyPass:  

語法:ProxyPass [path] !|url

它主要是用作URL前綴匹配,不能有正則表達式,它裏面配置的Path實際上是一個虛擬的路徑,在反向代理到後端的url後,path是不會帶過去的,使用示例:

1)、ProxyPass /images/ !

 這個示例表示,/images/的請求不被轉發。

2)、ProxyPass /mirror/foo/ http://backend.example.com/

我們假設當前的服務地址是http://example.com/,如果我們做下面這樣的請求:

http://example.com/mirror/foo/bar

那將被轉成內部請求:

http://backend.example.com/bar

注:配置的時候,不需要被轉發的請求,要配置在需要被轉發的請求前面。


2、ProxyPassMatch:
語法:ProxyPassMatch [regex] !|url

這個實際上是url正則匹配,而不是簡單的前綴匹配,匹配上的regex部分是會帶到後端的url的,這個是與ProxyPass不同的。使用示例:

1、ProxyPassMatch ^/images !

這個示例表示對/images的請求,都不會被轉發。

2、ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com$1

這個示例表示對所有gif圖片的請求,都被會轉到後端,如此時請求http://example.com/foo/bar.gif,那內部將會轉換爲這樣的請求http://backend.example.com/foo/bar.gif。


3、ProxyPassReverse

語法:ProxyPassReverse [路徑] url 

它一般和ProxyPass指令配合使用,此指令使Apache調整HTTP重定向應答中Location, Content-Location, URI頭裏的URL,這樣可以避免在Apache作爲反向代理使用時,。後端服務器的HTTP重定向造成的繞過反向代理的問題。參看下面的示例:

ProxyPass /example http://www.example.com/
ProxyPassReverse /example http://www.example.com/

ProxyPassReverse的作用就是反向代理,如果沒有加這樣的反向代理設置的情況下,訪問http://www.test.com/example/a,如果www.example.com對請求進行了redirect至http://www.example.com/b,那麼,客戶端就會繞過反向代理,進而訪問http://www.test.com/example/b。如果設置了反向代理,則會在轉交HTTP重定向應答到客戶端之前調整它爲http://www.test.com/example/a/b,即是在原請求之後追加上了redirect的路徑。



二.配置方法

下載 Apache web server  2.2,安裝完成後,修改安裝目錄下的 conf/httpd.conf 文件,將以下兩行前的註釋字符 # 去掉。

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

在這個配置文件最後,加上

ProxyPass                  /app1 http://<tomcat_server_address>:port/url1

ProxyPassReverse  /app1 http://<tomcat_server_address>:port/url1

保存配置文件後重新啓動 Apache 就可以了。當用戶訪問

http://<apache_server_address>/app1 的時候,Apache 後臺自動將請求轉發給 Tomcat ,用戶只認爲 Apache server 就是他所要的應用服務器。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章