標籤:內容 apache virt cluster bsp common epo 功能 sre
反向 Proxy負載平衡之APACHE
一、反向 Proxy
1.1 介紹反響代理
反向 Proxy(Reverse Proxy)方式是指以Proxy 伺服器來接受internet上的串連請求,然後將請求轉寄給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求串連的用戶端,此時Proxy 伺服器對外就表現為一個反向 Proxy伺服器。
1.2 反向 Proxy的工作方式
通常的Proxy 伺服器,只用於代理內部網路對Internet的串連請求,客戶機必須指定Proxy 伺服器,並將本來要直接發送到Web伺服器上的http請求發送到Proxy 伺服器中。由於外部網路上的主機並不會配置並使用這個Proxy 伺服器,普通Proxy 伺服器也被設計為在Internet上搜尋多個不確定的伺服器,而不是針對Internet上多個客戶機的請求訪問某一個固定的伺服器,因此普通的WebProxy 伺服器不支援外部對內部網路的訪問請求。當一個Proxy 伺服器能夠代理外部網路上的主機,訪問內部網路時,這種代理服務的方式稱為反向 Proxy服務。此時Proxy 伺服器對外就表現為一個Web伺服器,外部網路就可以簡單把它當作一個標準的Web伺服器而不需要特定的配置。不同之處在於,這個伺服器沒有儲存任何網頁的真實資料,所有的靜態網頁或者CGI程式,都儲存在內部的Web伺服器上。因此對反向 Proxy伺服器的攻擊並不會使得網頁資訊遭到破壞,這樣就增強了Web伺服器的安全性。
反向 Proxy方式和包過濾方式或普通代理方式並無衝突,因此可以在防火牆裝置中同時使用這兩種方式,其中反向 Proxy用於外部網路訪問內部網路時使用,正向 Proxy或包過濾方式用於拒絕其他外部存取方式並提供內部網路對外部網路的訪問能力。因此可以結合這些方式提供最佳的安全訪問方式。
1.3 反向 Proxy的作用
1.3.1 保護網站安全
任何來自Internet的請求都必須先經過Proxy 伺服器
1.3.2 配置緩衝功能加速Web請求
可以緩衝真實Web伺服器上的某些靜態資源,減輕真實Web伺服器的負載壓力
1.3.3 實現負載平衡
充當負載平衡伺服器均衡地分發請求,平衡叢集中各個伺服器的負載壓力
二、使用apache實現反向 Proxy實戰
2.1 環境準備:兩台虛擬機器
作業系統:centos7.X
1、備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# yum install -y gcc glibc gcc-c++ make screen tree lrzsz
node1:
以yum的方式安裝apache修改http連接埠為8080
# yum install -y httpd# sed -i ‘s/Listen 80/Listen 8080/g‘ /etc/httpd/conf/httpd.conf# echo ‘node1‘ > /var/www/html/index.html [[email protected] ~]# curl http://192.168.3.200:8080/node1
node2:
以yum的方式安裝apache修改http連接埠為8080
# yum install -y httpd# sed -i ‘s/Listen 80/Listen 8080/g‘ /etc/httpd/conf/httpd.conf# echo ‘node2‘ > /var/www/html/index.html [[email protected] ~]# curl http://192.168.3.200:8080/node2
在node1上再次編譯安裝apache2.4.25作為反向 Proxy伺服器
# cd /usr/local/src/ && wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.4.25.tar.gz# tar zxf httpd-2.4.25.tar.gz# cd httpd-2.4.25# ./configure --prefix=/usr/local/httpd-2.4.25 --enable-so --enable-modules="all"# make && make install# ln -s /usr/local/httpd-2.4.25/ /usr/local/httpd
編輯linux-node1的apache作為反向 Proxy的設定檔
# vim /usr/local/httpd/conf/extra/httpd-proxy.confLoadModule proxy_module modules/mod_proxy.so #proxy模組LoadModule proxy_connect_module modules/mod_proxy_connect.so #連結的模組LoadModule proxy_http_module modules/mod_proxy_http.so #給http做代理模組LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #負載平衡模組LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so #演算法模組,根據server的請求量LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so #演算法模組,根據server流量LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so #演算法模組,根據server繁忙程度LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #ProxyRequests Off #如果沒有對伺服器採取安全措施之前,請不要開啟此項<Proxy balancer://mycluster> #lb叢集組的名稱BalancerMember http://192.168.3.140:8080 #叢集群組成員BalancerMember http://192.168.3.200:8080 #叢集群組成員</Proxy>ProxyPass /demo balancer://mycluster #跳轉,和lb叢集組名稱對應ProxyPassReverse /demo balancer://mycluster
在apache的主設定檔include上述設定檔,並啟動apache
# vim /usr/local/httpd/conf/httpd.confInclude conf/extra/httpd-proxy.conf
# 寫入測試檔案
# echo ‘node1‘ > /usr/local/httpd-2.4.25/htdocs/index.html/usr/local/httpd/bin/apachectl -t # 測試apache文法是否正確/usr/local/httpd/bin/apachectl -k start # 啟動apache
通過訪問Proxy 伺服器,可以看到負載平衡的效果
http://192.168.3.140:8080/demo
對apache增加一個管理,並重啟
# cat /usr/local/httpd/conf/extra/httpd-proxy.confLoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.soLoadModule slotmem_shm_module modules/mod_slotmem_shm.soProxyRequests Off<Proxy balancer://mycluster>BalancerMember http://192.168.3.140:8080BalancerMember http://192.168.3.200:8080</Proxy>ProxyPass /demo balancer://myclusterProxyPassReverse /demo balancer://mycluster<Location /manager>SetHandler balancer-managerOrder Deny,AllowAllow from all</Location>
開啟瀏覽器管理介面
http://192.168.3.140:8080/manager
增加虛擬機器主機
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_http_module modules/mod_proxy_http.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.soLoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.soLoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.soLoadModule slotmem_shm_module modules/mod_slotmem_shm.soProxyRequests Off<Proxy balancer://mycluster>BalancerMember http://192.168.3.140:8080BalancerMember http://192.168.3.200:8080</Proxy>ProxyPass /demo balancer://myclusterProxyPassReverse /demo balancer://mycluster<Location /manager>SetHandler balancer-managerOrder Deny,AllowAllow from all</Location><VirtualHost *:80>ServerAdmin [email protected]DocumentRoot "/opt"ServerName www.chinasoft.comServerAlias chinasoft.comErrorLog "logs/www.chinasoft.com-error_log"CustomLog "logs/www.chinasoft.com-access_log" commonProxyPass / balancer://myclusterProxyPassReverse / balancer://mycluster</VirtualHost>
在本地電腦的host檔案加入以下內容,過後要清理掉
192.168.3.140 www.chinasoft.com
http://www.chinasoft.com
反向 Proxy負載平衡之APACHE