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

简介:

1、理论部分

wKiom1YgLReCvsB4AACulHM86BU356.jpg

1.1、Reverse Proxy概念

是指以代理服务器来接受internet上的请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet上的请求连接客户端。

1.2、Reverse Proxy的工作流程

wKioL1YgMmbiXxePAAD3CpjCI_g582.jpg

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)官方:

http://www.nginx.org

2)Tengine:

http://tengine.taobao.org


实验部分参阅资料:

1)Nginx官方下载路径:

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

2)多端口监听的配置:

http://linder.iteye.com/blog/782071









本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1703299,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
42 2
|
8天前
|
缓存 负载均衡 应用服务中间件
Nginx如何反向代理后端服务?
【7月更文挑战第7天】
17 1
Nginx如何反向代理后端服务?
|
8天前
|
缓存 负载均衡 应用服务中间件
Nginx反向代理优化
教你如何做好Nginx反向代理优化
|
13天前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
35 10
|
9天前
|
应用服务中间件 Linux nginx
CentOS 7 上配置 Nginx 作为反向代理
在CentOS 7上设置Nginx反向代理的步骤:安装Nginx;启动Nginx服务编辑`/etc/nginx/nginx.conf`;添加`proxy_pass http://app_server_address;将请求转发至应用服务器;重启Nginx`sudo systemctl restart nginx`;验证配置是否成功
|
17天前
|
JSON 负载均衡 应用服务中间件
Nginx反向代理与负载均衡
Nginx反向代理与负载均衡
|
18天前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
21天前
|
缓存 负载均衡 应用服务中间件
Nginx 是一个高性能的开源反向代理服务器和 Web 服务器
Nginx 是一个高性能的开源反向代理服务器和 Web 服务器
22 0
|
25天前
|
Java 应用服务中间件 PHP
杨老师课堂之Nginx学习之反向代理
杨老师课堂之Nginx学习之反向代理
22 0
|
负载均衡 容灾 应用服务中间件
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
最近同学出去面试经常会被问到一个问题。 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办? 答曰:不考虑带宽峰值的话,比较新的 CPU 跑 nginx 单核每秒能接近 2 万请求,而且nginx如果纯做 HTTP 转发的话,Nginx 的性能高到恐怖,会挂掉很不科学。。。。 面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机 答曰:阿里云机房会断电。。。你特么在逗我吧。。
使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群