反向代理負載均衡之APACHEhtml
1、反向代理
1.1 介紹反響代理node
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。linux
1.2 反向代理的工做方式c++
一般的代理服務器,只用於代理內部網絡對Internet的鏈接請求,客戶機必須指定代理服務器,並將原本要直接發送到Web服務器上的http請求發送到代理服務器中。因爲外部網絡上的主機並不會配置並使用這個代理服務器,普通代理服務器也被設計爲在Internet上搜尋多個不肯定的服務器,而不是針對Internet上多個客戶機的請求訪問某一個固定的服務器,所以普通的Web代理服務器不支持外部對內部網絡的訪問請求。當一個代理服務器可以代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。此時代理服務器對外就表現爲一個Web服務器,外部網絡就能夠簡單把它看成一個標準的Web服務器而不須要特定的配置。不一樣之處在於,這個服務器沒有保存任何網頁的真實數據,全部的靜態網頁或者CGI程序,都保存在內部的Web服務器上。所以對反向代理服務器的攻擊並不會使得網頁信息遭到破壞,這樣就加強了Web服務器的安全性。
反向代理方式和包過濾方式或普通代理方式並沒有衝突,所以能夠在防火牆設備中同時使用這兩種方式,其中反向代理用於外部網絡訪問內部網絡時使用,正向代理或包過濾方式用於拒絕其餘外部訪問方式並提供內部網絡對外部網絡的訪問能力。所以能夠結合這些方式提供最佳的安全訪問方式。web
1.3 反向代理的做用算法
1.3.1 保護網站安全apache
任何來自Internet的請求都必須先通過代理服務器vim
1.3.2 配置緩存功能加速Web請求centos
能夠緩存真實Web服務器上的某些靜態資源,減輕真實Web服務器的負載壓力 瀏覽器
1.3.3 實現負載均衡
充當負載均衡服務器均衡地分發請求,平衡集羣中各個服務器的負載壓力
2、使用apache實現反向代理實戰
2.1 環境準備:兩臺虛擬機
操做系統:centos7.X
一、備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
二、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -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 [root@node2 ~]# 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 [root@node2 ~]# curl http://192.168.3.200:8080/ node2
在node1上再次編譯安裝apache2.4.25做爲反向代理服務器
# 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做爲反向代理的配置文件
# vim /usr/local/httpd/conf/extra/httpd-proxy.conf LoadModule 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.conf
Include 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
經過訪問代理服務器,能夠看到負載均衡的效果
http://192.168.3.140:8080/demo
對apache增長一個管理,並重啓
# cat /usr/local/httpd/conf/extra/httpd-proxy.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://192.168.3.140:8080 BalancerMember http://192.168.3.200:8080 </Proxy> ProxyPass /demo balancer://mycluster ProxyPassReverse /demo balancer://mycluster <Location /manager> SetHandler balancer-manager Order Deny,Allow Allow from all </Location>
打開瀏覽器管理界面
http://192.168.3.140:8080/manager
增長虛擬主機
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://192.168.3.140:8080 BalancerMember http://192.168.3.200:8080 </Proxy> ProxyPass /demo balancer://mycluster ProxyPassReverse /demo balancer://mycluster <Location /manager> SetHandler balancer-manager Order Deny,Allow Allow from all </Location> <VirtualHost *:80> ServerAdmin webmaster@chinasoft.com DocumentRoot "/opt" ServerName www.chinasoft.com ServerAlias chinasoft.com ErrorLog "logs/www.chinasoft.com-error_log" CustomLog "logs/www.chinasoft.com-access_log" common ProxyPass / balancer://mycluster ProxyPassReverse / balancer://mycluster </VirtualHost>
在本地電腦的host文件加入如下內容,事後要清理掉
192.168.3.140 www.chinasoft.com
http://www.chinasoft.com