文档章节

Nginx+Redis实现反向代理和Session共享(一)

ali安东尼
 ali安东尼
发布于 2017/05/23 15:20
字数 1460
阅读 29
收藏 1

#Nginx+Redis实现反向代理和Session共享(一)


###什么是正向代理和反向代理?

正向代理

假如我访问不了google,但是有个代理服务器可以访问google,那我可以通过连接这个代理服务器来访问google。

正向代理是一个位于客户端和目标服务器之间的一个代理服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向目标服务器转交请求并将获得的内容返回给客户端。

反向代理

访问http://www.baidu.com,但是百度页面文件不是在访问的目标服务器上,目标服务器只是暗中从另外一台服务器获取页面文件,然后呈现给用户,用户对内部操作并不知情。

###正向代理和反向代理区别

从用途上来讲:

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。

反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。

反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

从安全性来讲:

正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

###反向代理和负载均衡区别?

这里不得不说说两者之间的区别了,之前还一直认为它们没啥区别~~~从功能方面看,个人认为是一个包含和被包含的关系。

1.反向代理,是有把命令转发的能力,这个是必须基础。而负载均衡,是把命令转发到不同的服务器上,均衡各个服务器。

2.做了反向代理才能实现负载均衡。负载均衡是做反向代理的目的之一。

###服务器架构 IMG

1.有三台服务器,其中两台是用作Web服务(相同系统项目),另外一台用Nginx实现负载均衡、反向代理、Session服务器  

2.访问过程:         

a. 当用户A访问nginx代理的时候,nginx指向web1;

b. web1通过session_id()获取当前浏览器头的cookie信息所带的session_id,然后以[session_id()."username"]的作为key的形式保存在redis中。

c. 当用户A再次刷新页面访问nginx代理的时候,nginx指向web2;

d. web2获取session_id然后以[session_id()."username"]的形式查询redis是否存在该session,如果存在则无需登录。

3.架构特点 ![输入图片说明输入图片说明

###Nginx反向代理配置

1.添加hosts文件

    #vi /etc/hosts     127.0.0.1 centos.agent.com

2.nginx.conf  

nginx 使用反向代理,主要是使用location模块下的proxy_pass选项

    #centos.agent.conf     server {         listen 80;         server_name centos.agent.com;         access_log /usr/local/var/log/nginx/centos.agent.access.log main;         error_log /usr/local/var/log/nginx/centos.agent.error.log error;         location / {              proxy_pass http://192.168.33.10;         }     }

3.测试访问   当我访问上的nginx 的 centos.agent.com 的内容时候, 就反向代理到虚拟机centos上的 192.168.33.10 的index.html页面。

###Nginx负载均衡

随着业务量的增大,就需要使用负载均衡减轻单台服务器压了。

centos.agent.com作为主服务器承担请求分发的任务,当外部访问centos.agent.com,就会把请求发送给以下这三台服务器

192.168.33.11

192.168.33.12

192.168.33.13

基于 weight 权重的负载 该配置使用恒等权重,三台服务器权重相同,轮询分发。

    upstream agent_servers{#定义上游服务器列表组         server 192.168.33.11 weight=10;         server 192.168.33.12 weight=10;         server 192.168.33.13 weight=10;         }         server {         listen 80;         server_name upstream.agent.com;         access_log /usr/local/var/log/nginx/upstream.agent.access.log main;         error_log /usr/local/var/log/nginx/upstream.agent.error.log error;         location / {         proxy_pass http://agent_servers;         proxy_set_header  X-Real-IP  $remote_addr;         }     }

其他负载均衡 该配置使用恒等权重,三台服务器权重相同,轮询分发。

    upstream webservers{         server 192.168.33.11 down;         server 192.168.33.12 weight=10 max_fails=2 fail_timeout=30s;         server 192.168.33.13 backup;     }     ○ max_fails : 允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。     ○ fail_timeout : 在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用,进行健康状态检查。     ○ 所以这2个一起搭配使用,表示:当失败2次的时候,就停止使30秒。     ○ down 表示这台机器暂时不参与负载均衡。相当于注释掉了。     ○ backup 表示这台机器是备用机器,是其他的机器不能用的时候,这台机器才会被使用,俗称备胎 O__O "…

基于 ip_hash 的负载

这种分配方式,每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,这种方法可以有效解决了动态网页存在的session共享问题

    upstream webservers{         ip_hash;         server 192.168.33.11 weight=1 max_fails=2 fail_timeout=30s;         server 192.168.33.12 weight=1 max_fails=2 fail_timeout=30s;         server 192.168.33.13 down;     }

注意:

ip_hash 模式下,最好不要设置weight参数,这样将会导致很多的流量分配不均匀。

按照访问IP的hash结果分配,如果某一IP访问量大的话就变相的违背了负载均衡特性。

由睿江云开发人员提供,想了解更多,请登陆www.eflycloud.com

© 著作权归作者所有

ali安东尼
粉丝 3
博文 192
码字总数 173101
作品 0
广州
私信 提问
Nginx--Session共享问题

在Nginx做反向代理时,面对集群,如何保证Session的一致性。 第一种是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的。 第二种是利用web容器...

btwangzhi
2017/11/26
0
0
tomcat的session问题

记录客户端操作我们一般使用cookie进行客户身份识别,session存储客户端的信息,session保存在服务器端。当我们负载均衡服务后,客户端请求定位到另外一台服务器,session信息在另外一台服务...

Ailu0li
2017/02/11
0
0
nginx负载均衡实现tomcat集群方案简要小结

重点两部分:一、负载均衡二、tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问。 nginx是一个常...

天下杰论
2015/03/11
1K
1
了解:Apache+Tomcat实现负载均衡

反向代理负载均衡 (Apache2+Tomcat7/8) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式...

凡尘里的一根葱
2015/11/06
72
0
使用Nginx在windows和linux上搭建集群

Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 特点:反向代理 负载均衡 动静分离… 反向代理(Reverse Proxy)方式是指以代理服务器来接受int...

必须往前走
01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
8
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部