天天看點

高性能高可用方案Nginx (二)Reverse Proxy(反向代理)

1、理論部分

高性能高可用方案Nginx (二)Reverse Proxy(反向代理)

1.1、Reverse Proxy概念

是指以代理伺服器來接受internet上的請求,然後将請求轉發給内部網絡上的伺服器,并将伺服器上得到的結果傳回給internet上的請求連接配接用戶端。

1.2、Reverse Proxy的工作流程

高性能高可用方案Nginx (二)Reverse Proxy(反向代理)

1)用戶端發出通路請求到Reverse Proxy伺服器

2)Reverse Proxy伺服器經過防火牆的特定通路,将請求轉發到内容伺服器

3)内容伺服器将傳回結果經過原通道傳回給Reverse Proxy伺服器

4)Reverse Proxy将檢索到的資訊發送給用戶端。

注意:如果内容伺服器傳回錯誤消息,代理伺服器會先行截取該消息并更改标頭中列出的任何 URL,然後再将消息發送給客戶機。如此可防止外部客戶機擷取内部内容伺服器的重定向 URL。

1.3、Reverse Proxy的特征

1)Reverse Proxy對外表現為一台Web伺服器而不需要特定的Web伺服器配置

2)Reverse Proxy伺服器不儲存任何網頁真實資料,所有的靜态頁面或者CGI程式,都存于内部Web伺服器上。

1.4、Reverse Proxy的作用

1)增加伺服器的安全性

2)提高服務的通路性能

1.5、Reverse Proxy的分類

1)普通反向代理

2)安全反向代理 - 使用安全套接字(SSL)協定加密

1.6、Reverse Proxy的應用場景

CDN的全稱是Content Delivery Network,即内容分發網絡。其基本思路是盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使内容傳輸的更快、更穩定。通過在網絡各處放置反向代理節點伺服器所構成的在現有的網際網路基礎之上的一層智能虛拟網絡,CDN系統能夠實時地根據網絡流量和各節點的連接配接、負載狀況以及到使用者的距離和響應時間等綜合資訊将使用者的請求重新導向離使用者最近的服務節點上。其目的是使使用者可就近取得所需内容,解決 Internet網絡擁擠的狀況,提高使用者通路網站的響應速度。

2、實驗部分

2.1、實驗基礎資訊

伺服器資訊:

proxySer:

ip address=10.168.0.185

hostname=proxySer

tomcatSer:

ip address=10.168.0.188

hostname=tomcatSer

client:

ipaddress=10.168.0.8

hostname=client

2.2、tomcat的安裝和配置

In TomcatSer

2.2.1、step1

安裝yum源:

yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps tomcat6-docs-webapp tomcat6-javadoc java-1.7.0-openjdk      

2.2.2、step2

啟動tomcat服務和設定開機自啟動:

/etc/init.d/tomcat6 start
 chkconfig tomcat6 on      

2.2.3、step3

建立程式目錄:

 #建立程式目錄1
 mkdir -p /home/wwwroot/w1.cmdschool.org
 chown root:tomcat /home/wwwroot/w1.cmdschool.org
 echo w1.cmdschool.org > /home/wwwroot/w1.cmdschool.org/index.html
 #建立程式目錄2
 mkdir -p /home/wwwroot/w2.cmdschool.org
 chown root:tomcat /home/wwwroot/w2.cmdschool.org
 echo w2.cmdschool.org > /home/wwwroot/w1.cmdschoo2.org/index.html      

2.2.4、step4

建立虛拟伺服器:

用<!---->注解掉以下代碼:

代碼1:

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">      

代碼2:

      </Host>      

新開一行并建立于<Host ...></Host>下面

      <Host name="localhost" appBase="/home/wwwroot/w1.cmdschool.org"
       unpackWARs="false" autoDeploy="true" xmlValidation="false"
       xmlNamespaceAware="false">
      <Context path="" docBase="." debug="0" reloadable="true" crossContext="true"/>
      </Host>      

2.2.5、step5

開啟多tomcat同時工作的模式:

于<Server ..></Server>标簽内部加入如下代碼:

  <!-開啟第二個tomcat->
  <Service name="Catalina8081">
    <Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina8081" defaultHost="localhost">
      <Host name="localhost" appBase="/home/wwwroot/w2.cmdschool.org"
       unpackWARs="false" autoDeploy="true" xmlValidation="false"
       xmlNamespaceAware="false">
      <Context path="" docBase="." debug="0" reloadable="true" crossContext="true"/>
      </Host>
    </Engine>
  </Service>
  
  <!-開啟第三個tomcat->
  <Service name="Catalina8082">
    <Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina8081" defaultHost="localhost">
      <Host name="localhost" appBase="/home/wwwroot/w2.cmdschool.org"
       unpackWARs="false" autoDeploy="true" xmlValidation="false"
       xmlNamespaceAware="false">
      <Context path="" docBase="." debug="0" reloadable="true" crossContext="true"/>
      </Host>
    </Engine>
  </Service>      

2.2.6、step6

重新開機tomcat服務:

/etc/init.d/tomcat6 restart      

2.2.7、step7

防火牆配置:

vim編輯/etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8082 -j ACCEPT      
/etc/init.d/tomcat6 restart      

2.2.8、step8

測試

In proxySer

Tomcat服務測試:

curl http://10.168.0.188:8080
curl http://10.168.0.188:8081
curl http://10.168.0.188:8082      

2.3、nginx的安裝和配置

In proxySer:

2.3.1、step1

yum源的安裝

yum -y install http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum -y install nginx      

2.3.2、step2

vim編輯/etc/nginx/nginx.conf

把原來的http{}内容全部清除,添加内容如下:

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
    inactive=24h  max_size=1g;
    include /etc/nginx/conf.d/*.conf;

}      

增加緩存目錄

mkdir -p /data/nginx/cache      

清理預設配置:

mkdir /etc/nginx/conf.d/backup
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/backup      

增加代理伺服器:

vim編輯/etc/nginx/conf.d/w1.cmdschool.org.conf

server {
    listen 81;
    location / {
        proxy_pass             http://10.168.0.188:8080;
        proxy_set_header       Host $host;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
    }
}      

vim編輯/etc/nginx/conf.d/w2.cmdschool.org.conf

server {
    listen 82;
    location / {
        proxy_pass             http://10.168.0.188:8081;
        proxy_set_header       Host $host;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
    }
}      
server {
    listen 83;
    location / {
        proxy_pass             http://10.168.0.188:8082;
        proxy_set_header       Host $host;
        proxy_cache            STATIC;
        proxy_cache_valid      200  1d;
        proxy_cache_use_stale  error timeout invalid_header updating
                                   http_500 http_502 http_503 http_504;
    }
}      

2.3.3、step3

啟動nginx服務并設定開機自啟動

/etc/init.d/nginx start
chkconfig nginx on      

2.3.4、step4

-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 82 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 83 -j ACCEPT      

In clentSer:

2.3.5、step5

nginx反向代理測試:

curl http://10.168.0.185:81
curl http://10.168.0.185:82
curl http://10.168.0.185:83      

----------------------------------------------------------

理論部分參閱資料:

1)官方:

http://www.nginx.org

2)Tengine:

http://tengine.taobao.org

實驗部分參閱資料:

1)Nginx官方下載下傳路徑:

http://nginx.org/en/download.html

繼續閱讀