高性能高可用方案Nginx (二)Reverse Proxy(反向代理)
1、理论部分
1.1、Reverse Proxy概念
是指以代理服务器来接受internet上的请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet上的请求连接客户端。
1.2、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源:
1
|
yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps tomcat6-docs-webapp tomcat6-javadoc java-1.7.0-openjdk
|
2.2.2、step2
启动tomcat服务和设置开机自启动:
1
2
|
/etc/init .d /tomcat6 start
chkconfig tomcat6 on
|
2.2.3、step3
创建程序目录:
1
2
3
4
5
6
7
8
|
#创建程序目录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:
1
2
3
|
<Host name= "localhost" appBase= "webapps"
unpackWARs= "true" autoDeploy= "true"
xmlValidation= "false" xmlNamespaceAware= "false" >
|
代码2:
1
|
< /Host >
|
新开一行并创建于<Host ...></Host>下面
1
2
3
4
5
|
<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>标签内部加入如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<!-开启第二个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服务:
1
|
/etc/init .d /tomcat6 restart
|
2.2.7、step7
防火墙配置:
vim编辑/etc/sysconfig/iptables
1
2
3
|
-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 |
重启tomcat服务:
1
|
/etc/init .d /tomcat6 restart
|
2.2.8、step8
测试
In proxySer
Tomcat服务测试:
1
2
3
|
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源的安装
1
2
|
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{}内容全部清除,添加内容如下:
1
2
3
4
5
6
|
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;
} |
增加缓存目录
1
|
mkdir -p /data/nginx/cache
|
清理默认配置:
1
2
|
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
1
2
3
4
5
6
7
8
9
10
11
|
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
1
2
3
4
5
6
7
8
9
10
11
|
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;
}
} |
vim编辑/etc/nginx/conf.d/w2.cmdschool.org.conf
1
2
3
4
5
6
7
8
9
10
11
|
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服务并设置开机自启动
1
2
|
/etc/init .d /nginx start
chkconfig nginx on |
2.3.4、step4
防火墙配置:
vim编辑/etc/sysconfig/iptables
1
2
3
|
-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反向代理测试:
1
2
3
|
curl http: //10 .168.0.185:81
curl http: //10 .168.0.185:82
curl http: //10 .168.0.185:83
|
----------------------------------------------------------
理论部分参阅资料:
1)官方:
2)Tengine:
实验部分参阅资料:
1)Nginx官方下载路径:
http://nginx.org/en/download.html
2)多端口监听的配置: