Apache 正向代理與反向代理配置
Apache提供了 mod_proxy 模組用於提供代理服務,能夠支援的包括正向代理、反向代理、透明代理、快取、負載均衡,HTTP代理、FTP代理、SSL代理等若干強大的功能。
配置代理方法很簡單那,首先在 Apache 上啟用 mod_proxy 模組,需要注意的是,如果在 Apache-2.2 上,則還需要載入名為 mod_proxy_http 的模組。因為 2.2 系列把代理功能都拆分成N個小模組了。
一般 Apache 的這些功能我們在編譯的時候都是以模組的形式加入的,編譯時加上相關引數,然後編譯安裝就可以了。
12 | . /configure --prefix= /usr/local/apache2 -- enable -so -- enable -rewrite=shared -- enable -proxy=shared make && make install |
我這裡先是看了我的 Apache 中 有沒有這個模組,如果沒有 Apache 沒有安裝 proxy 模組,可以不用重新編譯新增模組。
12 | /usr/local/apache2/bin/apxs -c -i mod_proxy.c proxy_util.c ( ps 必須2個c一起編譯,不然會報錯) /usr/local/apache2/bin/apxs -c -i mod_proxy_http.c proxy_util.c |
把 proxy 編譯成模組,然後再把 proxy 的配置加入配置檔案,去掉下面三行記錄的#號,如果不存在,新增以下下內容。
123 | LoadModule proxy_module modules/mod_proxy.so #必須的模組 LoadModule proxy_connect_module modules/mod_proxy_connect.so #應用軟體代理 例如 QQ,MSN LoadModule proxy_http_module modules/mod_proxy_http.so #http請求代理 訪問網頁 |
一、正向代理
先說一正向代理(Forward Proxy),通常普通使用者使用的比較多的,是正向代理。也就是在瀏覽器的網路連線屬性框中,填寫上一個代理伺服器的ip和埠,即可通過代理伺服器中轉,去瀏覽網頁。有時候網站對單個 IP 某些操作進行了次數限制,設定代理 IP 訪問,不斷的更改代理 IP 來突破網站限制,也是正向代理。
配置這種代理非常簡單:
1、開啟apache的conf,啟用好 proxy 模組後,加入如下幾行:(全域性配置)
12345678 | ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Deny from all Allow from 192.16.10.0/24 </Proxy> |
2、當然也可以把在虛擬主機中進行設定,如下:
啟用虛擬主機
1 | NameVirtualHost *:80 |
12345678910111213141516171819202122 | <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/test ServerName www.test.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common <Directory "/var/www/test"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> ProxyRequests On ProxyVia On <Proxy *> Order deny,allow Deny from all Allow from 192.168.10.0/24 </Proxy> </VirtualHost> |
然後儲存退出,重啟載入 Apache 服務,現在即可在瀏覽器的網路連線屬性框中或 QQ 登入配置中,填寫上 your_apache_server_ip 的 ip 地址,埠是 80,開始用代理了。
使用 Apache 提供的代理,也可以加身份驗證,或者設定 ACL 來限制客戶端來源等。這些配置就和普通的 Apache 站點配置一樣。
其實關鍵就是要有 ProxyRequests 開啟,功能就已經可以使用了。
二、反向代理
反向代理也是個非常有用的功能。反向代理(Reverse Proxy)方式是指以代理伺服器來接受 Internet 上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給 Internet 上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。常用做網站伺服器配置,可以提供從防火牆外部代理伺服器到防火牆內部安全內容伺服器的加密連線,隱藏後端真實伺服器,更加安全。如 負載均衡 ,CDN 快取都是反向代理。配置方法如下:
1、啟用好 proxy 模組後,加入下邊一內容:(全域性配置)
12345678 | ProxyRequests off <Proxy /test> Order deny,allow Allow from all </Proxy> ProxyPass /test http://www.reverse.com/proxy ProxyPassReverse /test http://www.reverse.com/proxy |
2、在虛擬主機中進行設定,如下:
啟用虛擬主機
1 | NameVirtualHost *:80 |
123456789101112131415 | <VirtualHost *:80> ServerAdmin [email protected] ServerName www.test.com ErrorLog logs/dummy-host.example.com-error_log CustomLog logs/dummy-host.example.com-access_log common ProxyRequests Off <Proxy /test> Order deny,allow Allow from all </Proxy> ProxyPass /test http://www.reverse.com/proxy ProxyPassReverse /test http://www.reverse.com/proxy </VirtualHost> |
ProxyPass /test http://www.reverse.com/proxy : 將 www.test.com/test 域下的所有請求轉發給 www.reverse.com/proxy代理,例如www.test.com/test/login.php 會交給 www.reverse.com/proxy/login.php 代理。
ProxyPassReverse /test http://www.reverse.com/proxy :
www.reverse.com/proxy/login.php 中有如下程式碼:
123 | <?php header( 'Location: http://www.reverse.com/proxy/result.php' ); ?> |
那麼在重定向的時候,Apache 會將 HTTP 請求重新設為 http://www.reverse.com/proxy/result.php ,這樣的作用稍後講解
www.reverse.com/proxy/result.php 中有如下程式碼: