標籤:method 拒絕 pen c++ errorlog 不同 clu apr dha
1.1 介紹反向 Proxy
反向 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 環境準備:兩台虛擬機器
在兩台機器部署apache作為RS
第一台
[[email protected] ~]# hostnamelinux-node1.example.com[[email protected]-node1 ~]# uname -r2.6.32-504.el6.x86_64[[email protected]-node1 ~]# cat /etc/redhat-release CentOS release 6.6 (Final)[[email protected]-node1 ~]# tail -3 /etc/hosts192.168.230.128 linux-node1.example.com192.168.230.129 linux-node2.example.com
yum安裝httpd做RS節點
[[email protected] ~]# sed -i ‘s/Listen 80/Listen 8080/g‘ /etc/httpd/conf/httpd.conf[[email protected]-node1 ~]# echo "check-test1" > /var/www/html/index.html[[email protected]-node1 ~]# /etc/init.d/httpd startStarting httpd: [ OK ][[email protected]-node1 ~]# netstat -ntplActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22682 0.0.0.0:* LISTEN 1008/sshd tcp 0 0 :::22682 :::* LISTEN 1008/sshd tcp 0 0 :::8080 :::* LISTEN 3907/httpd
第二台上安裝httpd作為RS節點,同上,同時編譯安裝作為httpd反向 Proxy
安裝基礎環境包
yum -y install apr-devel apr-util-devel pcre-devel openssl-devel gcc-c++
下載
wget http://mirrors.tuna.tsinghua.edu.cn/apache//httpd/httpd-2.4.23.tar.gz wget http://www-eu.apache.org/dist//httpd/httpd-2.4.18.tar.gz
centos 6.6 預設的APR和APR-Util版本低 ,需要安裝新的 ,如下官方介紹
APR and APR-Util Make sure you have APR and APR-Util already installed on your system. If you don‘t, or prefer to not use the system-provided versions, download the latest versions of both APR and APR-Util from Apache APR, unpack them into /httpd_source_tree_root/srclib/apr and /httpd_source_tree_root/srclib/apr-util (be sure the directory names do not have version numbers; for example, the APR distribution must be under /httpd_source_tree_root/srclib/apr/) and use ./configure‘s --with-included-apr option. On some platforms, you may have to install the corresponding -dev packages to allow httpd to build against your installed copy of APR and APR-Util
下載新的apr和apr-util
[[email protected] src]# lsapr-1.4.5.tar.gz apr-util-1.5.1.tar.gz
解壓到http源碼的srclib目錄,不能帶版本號碼
[email protected] httpd-2.4.23]# ls srclib/apr apr-util Makefile Makefile.in
後面加上--with-included-apr
[[email protected] src]# ./configure --prefix=/usr/local/httpd-2.4.18 --enable-so --enable-modules="all" --with-included-apr[[email protected] httpd-2.4.23]# make && make install
測試組態並啟動
[[email protected] httpd-2.4.23]# /usr/local/httpd/bin/apachectl -tSyntax OK[[email protected]-node2 httpd-2.4.23]# /usr/local/httpd/bin/apachectl -k start
編輯linux-node2的apache作為反向 Proxy的設定檔
[[email protected] extra]# pwd #路徑/usr/local/httpd-2.4.18/conf/extra[[email protected]-node2 extra]# cat httpd-proxy.conf #www.check-blog.comLoadModule 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://check-cluster>BalancerMember http://192.168.230.129:8080BalancerMember http://192.168.230.128:8080</Proxy>ProxyPass /demo balancer://check-clusterProxyPassReverse /demo balancer://check-cluste#www.check-blog.comLoadModule 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://check-cluster> #lb叢集組的名稱BalancerMember http://192.168.230.129:8080 #叢集群組成員BalancerMember http://192.168.230.128:8080 #叢集群組成員</Proxy>ProxyPass /demo balancer://check-cluster #跳轉,和lb叢集組名稱對應,訪問demoProxyPassReverse /demo balancer://check-cluster 將剛才的檔案包含[[email protected]-node2 extra]# vim /usr/local/httpd-2.4.18/conf/httpd.conf +482# Proxy demoInclude conf/extra/httpd-proxy.conf檢查文法[[email protected]-node2 extra]# /usr/local/httpd/bin/apachectl -tSyntax OK重啟[[email protected]-node2 extra]# /usr/local/httpd/bin/apachectl -k restart
apache增加一個管理,並重啟
[[email protected] extra]# cat httpd-proxy.conf #www.check-blog.comLoadModule 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://check-cluster>BalancerMember http://192.168.230.129:8080BalancerMember http://192.168.230.128:8080</Proxy>ProxyPass /demo balancer://check-clusterProxyPassReverse /demo balancer://check-cluste<Location /manager> SetHandler balancer-manager Order Deny,Allow Allow from all</Location>優雅重啟[[email protected]-node2 extra]# ../../bin/apachectl -k graceful
增加虛擬機器主機生效
[[email protected] extra]# cat httpd-proxy.conf #www.check-blog.comLoadModule 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://check-cluster>BalancerMember http://192.168.230.129:8080BalancerMember http://192.168.230.128:8080</Proxy>ProxyPass /demo balancer://check-clusterProxyPassReverse /demo balancer://check-cluste<Location /manager> SetHandler balancer-manager Order Deny,Allow Allow from all</Location><VirtualHost *:80> ServerAdmin [email protected]-blog.com DocumentRoot "/opt" ServerName www.check-blog.com ServerAlias check-blog.com ErrorLog "logs/www.check-blog.com-error_log" CustomLog "logs/www.check-blog.com-access_log" common ProxyPass / balancer://check-cluster ProxyPassReverse / balancer://check-cluster</VirtualHost>重啟[[email protected]-node2 extra]# ../../bin/apachectl -k graceful
本地電腦解析
192.168.230.128 www.check-blog.com check-blog.com
其他參數講解
詳情請參看apache官網
設定權重:loadfactor
設定會話保持:stickysession
lb方式:預設是byrequest,也可以是bytraffic或者bybusyness
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html
反向 Proxy負載平衡之apache