-
2018-10-21 13:05:35
Nginx是一个很高效稳定的软负载均衡器,最新的版本可以负载均衡HTTP(s),TCP,UDP等多种协议的链接。一般访问量比较大一点的Web站点都会用NGINX做HTTP协议的Web负载均衡,其后端一般是多个PHP或者JAVA中间件。另外NGINX还可以和Keepalived配合防止均衡器的单点故障,这一点要强于F5,A10这一类的硬件负载均衡设备。
但是F5,A10等硬件负载均衡器虽然价格昂贵但是仍然很有市场,其中原因之一就是硬件负载均衡器比Nginx配置简单,具备图形化界面,有图形化的实时监测界面(收费版的Nginx Plux也有这个功能,但是价格更加昂贵)。但是最重要的一点,就是硬件负载均衡器有成熟的会话保持措施,这一点是Nginx的弱点。
Session会话保持机制?
一般来说,我们在java中都通过如下代码进行用户登录后的服务端注册,并且在用户下次请求时无需再登陆一遍,这就是Servlet的Session。
HttpSession session = request.getSession(false);
session.setAttribute("data", data);
session.getAttribute("data");使用了这种Session策略,那么Web容器比如tomcat就为当前用户生成一个SessionID,并且以这个SessionID为索引,存储这个用户相关的键值对,比如用户名,登陆时间一类的。存储在服务器的内存中。同时再response里向用户浏览器中设置一个cookie,这个cookie的名字为jsessionid,内容为服务器生成的随机数SessionID。
更多相关内容 -
Linux Nginx——Nginx会话保持、Nginx 动静分离
2021-05-07 19:32:441、Nginx会话保持 ip_hash、sticky_cookie_insert、jvm_route 2、Nginx 动静分离 为加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的...- nginx会话保持实现方式:
1、ip_hash
ip_hash使用源地址哈希算法,将同一客户端的请求只发往同一个后端服务器(除非该服务器不可用)。
ip_hash语法:
upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; }
ip_hash简单易用,但有以下问题:
当后端服务器宕机后,session会话丢失;同一客户端会被转发到同一个后端服务器,可能导致负载失衡;
2、sticky_cookie_insert
使用sticky_cookie_insert 启用会话亲缘关系,会导致来自同一客户端的请求被传递到一组服务器的同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一客户端导致负载失衡的情况(需要引入第三方模块才能实现)。
sticky模块
语法:upstream backend { server backend1.example.com; server backend2.example.com; sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/; } server { listen 80; server_name 3evip.cn; location / { proxy_pass http://backend; } }
说明:
expires:设置浏览器中保持cookie的时间
domain:定义cookie的域
path:为cookie定义路径3、jvm_route
jvm_route的原理
最初请求过来,没有带session信息,jvm_route就根据轮询(round robin)的方法,发到一台tomcat(后端web)上面。tomcat添加上session 信息,并返回给客户。
用户再次请求,jvm_route看到session中有后端服务器的名称,它就把请求转到对应的服务器上。
- Nginx 实现动静分离
为加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,简单来说,是使用正则表达式匹配过滤,交给不同的服务器。
1、准备环境
192.168.62.159 代理服务器
192.168.62.157 动态资源
192.168.62.155 静态资源
准备一个nginx代理 两个http 分别处理动态和静态。
192.168.62.159 代理服务器
1.配置nginx反向代理upstream;[root@nginx-server conf.d]# cat upstream.conf upstream static { server 192.168.62.155:80 weight=1 max_fails=1 fail_timeout=60s; } upstream phpserver { server 192.168.62.157:80 weight=1 max_fails=1 fail_timeout=60s; } server { listen 80; server_name localhost; #动态资源加载 location ~ \.(php|jsp)$ { proxy_pass http://phpserver; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #静态资源加载 location ~ .*\.(html|gif|jpg|png|bmp|swf|css|js)$ { proxy_pass http://static; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
192.168.62.155 静态资源
#静态资源配置 主配置文件-include /etc/nginx/conf.d/*.conf vim /etc/nginx/conf.d/static.conf server { listen 80; server_name localhost; location ~ \.(html|jpg|png|js|css|gif|bmp|jpeg) { root /home/www/nginx; index index.html index.htm; } } [root@nginx-server2 nginx]# cat /home/www/nginx/index.html 模拟静态资源 jingtai
192.168.62.157 动态资源
#动态资源配置: yum 安装php7.1 [root@nginx-server ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm [root@nginx-server ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm [root@nginx-server ~]# yum install php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysql php71w-mbstring php71w-bcmath php71w-mcrypt -y [root@nginx-server ~]# yum install -y php71w-fpm [root@nginx-server ~]# systemctl start php-fpm [root@nginx-server ~]# systemctl enable php-fpm 编辑nginx的配置文件: server { listen 80; server_name localhost; location ~ \.php$ { root /home/nginx/html; #指定网站目录 fastcgi_pass 127.0.0.1:9000; #指定访问地址 fastcgi_index index.php; #指定默认文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #站点根目录,取决于root配置项 include fastcgi_params; #包含nginx常量定义 } } [root@nginx-server1 html]# cat /home/nginx/html/index.php //模拟动态资源 dongtai
当访问静态页面的时候location 匹配到 (html|jpg|png|js|css|gif|bmp|jpeg) 通过转发到静态服务器,静态服务通过location的正则匹配来处理请求。
当访问动态页面时location匹配到 .\php 结尾的文件转发到后端php服务处理请求。
-
nginx 会话保持
2018-07-04 00:04:06一、Nginx会话保持 nginx会话保持主要有以下几种实现方式。1)ip_haship_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。ip_hash语法:upstream backend { ip_hash; ...一、Nginx会话保持
nginx会话保持主要有以下几种实现方式。
1)ip_hash
ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。
ip_hash语法:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
ip_hash简单易用,但有如下问题:
当后端服务器宕机后,session会丢失;
来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡;
不适用于CDN网络,不适用于前段还有代理的情况。2)sticky_cookie_insert
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器在同一台服务器。与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。因此可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。
语法:
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/;
}
说明:
expires:设置浏览器中保持cookie的时间
domain:定义cookie的域
path:为cookie定义路径3)使用后端服务器自身通过相关机制保持session同步,如:使用数据库、redis、memcached等做session复制
参考:
Tomcat7集群扩展session集中管理,tomcat-redis-session-manager使用
二、健康检查
通过heath_check配置健康检查。
health_check [interval=time] [fails=number] [passes=number] [uri=uri] [match=name];参考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#health_check
也可以通过 第三方插件解决:http://www.linuxyan.com/web-server/90.html
-
Nginx实现会话保持
2020-09-12 17:30:46在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,我们常用的方法有基于ip_hash的会话保持、基于cookie的会话保持。 一、基于ip_hash...前言
在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,我们常用的方法有基于ip_hash的会话保持、基于cookie的会话保持。
一、基于ip_hash的会话保持
在做Nginx的负载均衡时,可以在upstream里设置ip_hash,每个请求按访问ip的hash结果分配,映射到固定某一台的服务器,当后端服务器宕机后,session会丢失,再次发起请求时,会重新固定访问另一台正常的服务器并实现会话保持。缺点就是由于同一个IP客户端都固定访问一个后端服务器,这就可能会导致负载不均衡。下面是ip_hash的会话保持格式。
-
这里假设后端服务器都正常运行
在Nginx代理服务器(负载均衡服务器)中配置: =========================================== upstream test { ip_hash; server 10.20.151.112:80; server 10.20.151.113:80; }
至于这里为什么会返回这个结果,在我的Nginx实现负载均衡那篇博客有具体配置操作,感兴趣的可以去看看。因此不难看出,当我使用ip_hash时,实现了session保持,即客户端会固定访问112这台后端服务器(除非这台服务器宕机了),就算再次刷新页面也不会返回其他后端服务器的内容(注意:实际生产中后端服务器返回给请求客户端的内容是一样的,这里仅仅是为了做测试效果)。
-
假设固定访问的那台服务器宕机了
二、基于cookie的会话保持
这种方式就是将 用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的session,如果没有就先把cookie里面的sessoin存入该服务器,实现session会话保持。缺点是存入cookie有安全隐患,比如黑客可能会获取你的cookie从而获取你相关信息。使用这种方式实现会话保持保持,需要添加sticky_cookie_insert模块,与ip_hash不同之处在于,它不是基于IP来判断客户端的,而是基于cookie来判断。
-
添加sticky模块(我用yum方式安装的Nginx)
yum install -y pcre* openssl* gcc gcc-c++ make --安装编译环境 wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip --下载sticky模块 nginx -v --查看Nginx版本,因为要下载和yum安装nginx对应版本的源码包 wget http://nginx.org/download/nginx-1.18.0.tar.gz yum install -y unzip --安装解压工具 unzip 08a395c66e42.zip --解压模块包 mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42/ nginx-sticky-module-ng/ --改名 tar xzvf nginx-1.18.0.tar.gz -C /usr/local/ --解压nginx的源码包 cd /usr/local/nginx-1.18.0/ nginx -V --查看yum安装nginx所有模块 ====================================================================================== ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng ====================================================================================== make && make install Nginx -V --再次查看Nginx模块,添加成功
-
在代理服务器(负载均衡服务器)配置
vim upstream.conf --在子配置文件conf.d中创建upstream.conf ===================================================================================== upstream qfedu { server 192.168.198.143; server 192.168.198.145; sticky; }
vim proxy.conf ----在子配置文件conf.d中创建proxy.conf ===================================================================================== server { listen 80; server_name localhost; location / { proxy_pass http://testweb; } }
nginx -t --检查配置文件语法是否有错 nginx -s reload --重新加载配置文件
访问http://10.20.151.240/
总结
Nginx会话保持一般有基于ip_hash和基于cookie两种方式,尽管Nginx的会话保持可以使某个ip客户端访问固定的后端服务器,但这可能会导致负载的不均衡。采用cookie的方式进行会话保持时,需要引入第三方模块(sticky模块)才能实现。 使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器,这种方法可以避免上述ip_hash中来自同一局域网的客户端和前段代理导致负载失衡的情况。 使用后端服务器自身通过相关机制保持session同步,如:使用数据库、redis、memcached 等做session复制。
-
-
Nginx-会话保持
2020-04-17 16:38:27nginx会话保持主要有以下几种实现方式。 #一、ip_hash ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。 #####ip_hash语法: upstream backend { ip_hash; server ... -
详解Nginx反向代理实现会话(session)保持的两种方式
2021-01-10 01:46:37一、ip_hash: ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。 ip_hash语法: upstream backend { ip_hash; ... 来自同一局域网的客户端会被转发到 -
Nginx负载均衡会话保持
2020-09-01 23:37:14文章目录1.nginx负载均衡会话保持2.session共享的方法 1.nginx负载均衡会话保持 在使用负载均衡的时候会遇到会话保持的问题,可通过如下方式进行解决。 1.使用nginx的ip_hash,根据客户端的IP,将请求分配到对应的IP... -
ngnix会话保持
2014-08-04 14:07:06nginx反向代理负载均衡和session会话保持详细配置,附带必须软件包,nginx-sticky-module-1.1,nginx_upstream1.1,pcre-8.35, nginx-1.6.0, nginx_upstream_check_module-master -
Nginx会话保持之Cookie重写服务器端如何配置
2020-03-17 14:21:55nginx会话保持详细配置解说请参考我之前文章《tengine会话保持模块配置》,此文章主要讲述cookies配置中的重写cookies 本文档介绍如何在Apache、Nginx和Lighttpd应用服务器上配置Cookie来验证Cookie重写生效。... -
nginx会话保持值sticky模块
2019-05-05 16:59:10阅读目录 1.Sticky工作原理 ...nginx会话保持之nginx-sticky-module模块 在使用负载均衡的时候会遇到会话保持的问题,常用的方法有: 1.ip hash,根据客户端的IP,将请求分配到不同的服务器上; 2.cookie,... -
Nginx 会话保持、防盗链、地址重定向
2021-08-12 14:03:362、集群软硬件 一、会话保持 在我们做Nginx负载均衡的时候经常会遇到会话保持的问题,为了保证同一用户session会被分配到同一台服务器上,这时就需要会话保持,Nginx会话保持一般有基于ip_hash和基于cookie两种方式 ... -
Linux架构之Nginx 负载均衡会话保持
2019-09-29 05:48:58案例No.50:Nginx负载均衡会话保持 前期准备环境 web01、web02 (web01、web02、db01、nfs01都要优化基本源)[root@web01 ~]# vim /etc/yum.repos.d/CentOS-Base.repo #将[base]下的baseurl第二条、第三条源... -
Nginx与F5会话保持介绍
2019-12-24 16:12:50Nginx是一个很高效稳定的软负载均衡器,最新的版本可以负载...另外NGINX还可以和Keepalived配合防止均衡器的单点故障,这一点要强于F5,A10这一类的硬件负载均衡设备。 但是F5,A10等硬件负载均衡器虽然价格昂贵... -
nginx会话保持与防盗链
2020-08-18 15:46:38nginx会话保持主要有以下几种实现方式。 1、ip_hash ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。 ip_hash语法: upstream backend { ip_hash; server ... -
nginx会话保持之sticky模块
2018-11-16 11:39:071.在使用负载均衡的时候会遇到会话保持的问题,常用的方法有: 1.1.ip hash,根据客户端的IP,将请求分配到不同的服务器上; 1.2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者; ... -
nginx 负载均衡 会话保持 session同步
2018-05-31 17:36:291、会话保持Session 会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求会保持分配到一台服务器上。 2、什么时候需要会话保持 ... -
Nginx timeout超时配置详解
2021-01-20 15:02:22理解了下nginx 所有timeout相关的配置,如下: keepalive_timeout HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个... -
Nginx基于ip_hash的会话保持
2020-01-14 09:42:46nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。 nginx的upstream目前支持的5种方式的分配 1、... -
haproxy +nginx --- 负载均衡(会话保持)
2019-10-06 14:15:53环境 需要四台服务器,两台作为web服务器,一台作为haproxy,一台作为客户端. 该实验的架构图为: 关闭防火墙和selinux ...安装nginx 如果你想要安装nginx,请你点击nginx—编译安装或nginx—yum安装 添加验证... -
Nginx会话保持之nginx-sticky-module模块
2018-04-16 20:39:03在使用负载均衡的时候会遇到会话保持的问题,常用的方法有: 1.ip hash,根据客户端的IP,将请求分配到不同的服务器上 2.cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者 注意:... -
Nginx负载均衡session会话保持方法
2017-07-05 15:22:46将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的session,如果没有就先把cookie里面的sessoin存入该服务器,实现session会话保持。缺点是存入cookie有安全隐患。 2.使用... -
nginx保持会话的方式
2017-10-09 10:43:001)ip_hash 简单易用,但是有如下缺点 后端服务器宕机后,session会丢失 ... 使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器;与... -
Nginx 基于nginx-sticky-module模块进行会话保持
2020-07-20 16:55:312.sticky,根据服务器给客户端的cookie,客户端再次请求时会带上此cookie,nginx会把有此cookie的请求转发到颁发cookie的服务器上 sticky原理 Sticky是基于cookie的一种负载均衡解决方案,通过分发和识别cookie,使... -
Nginx学习总结(4)——负载均衡session会话保持方法
2016-12-14 09:35:25将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在该用户的session,如果没有就先把cookie里面的sessoin存入该服务器,实现session会话保持。缺点是存入cookie有安全隐患。 2.使用... -
Kubernetes(K8S)(八)——ingress服务部署、会话保持和TLS配置
2020-06-26 19:58:48实现会话保持6.Ingress TLS 配置 1.Ingress介绍 官网参考:https://kubernetes.github.io/ingress-nginx/ Ingress是一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务... -
14 Nginx的会话保持、动静分离、资源分离
2021-05-20 06:15:22Nginx负载均衡会话保持 我们在访问网站的时候,进行登陆以后,服务器上会生成一个session然后服务器会带着session_id返回一个给浏览器记录的cookie值,当第二次访问的时候,cookie会来服务器上与session进行对比,... -
nginx+php实现redis会话保持
2021-05-13 15:56:35nginx负载均衡会话保持什么是会话保持?实现会话保持有哪些方法?推荐不推荐模拟redis 实现会话保持 什么是会话保持? 会话保持就是固定用户的请求节点。 因为负载均衡的调度机制是轮询调度,所以会导致请求分散在... -
Nginx中保持长连接的配置 - 运维记录
2018-07-25 10:14:00在Nginx中,对于http1.0与http1.1是支持长连接的。http请求是基于TCP协议之上的,那么当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次握手来确定的,如果客户端与服务端之间网络差... -
Nginx会话保持和健康检查
2015-02-07 19:26:37Nginx会话保持和健康检查。