首页 运维 nginx nginx怎么实现负载均衡多站点共享Session

nginx怎么实现负载均衡多站点共享Session

May 17, 2023 am 08:31 AM
nginx session

多站点共享session常见的作法有:
•使用.net自动的状态服务(asp.net state service);
•使用.net的session数据库;
•使用memcached。
•使用cookie方式实现多个站点间的共享(这种方式只限于几个站点都在同一域名的情况下);
这里我们就 演练一下 以数据库的形来存储session,来实现多站点共享session。

首先我们 建好一下站点,如下图:

nginx怎么实现负载均衡多站点共享Session 

default.aspx 

nginx怎么实现负载均衡多站点共享Session

其中 有二个button  ,setsession 主要是用于给一个 session 赋值(如:session["sharevalue"] = “abcd”) ,

getsession 主要就是获得 一个 session 值。

具体代码如下:

nginx怎么实现负载均衡多站点共享Session  

 代码部分就这么多就行了…

下面就是要配置一下 web.config了 , 其实主要就是在
这个节点中 增加 machinekey 及 sessionstate 这两个节点,
1.增加machinekey 主要作用是:
“按照msdn的标准说法:“对密钥进行配置,以便将其用于对 forms 身份验证 cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说asp.net的很多加密,都是依赖于machinekey里面的值,例如forms 身份验证 cookie、viewstate的加密。默认情况下,asp.net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machinekey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和viewstate,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machinekey。“ ,具体可以查一下其它资料。
2.增加 sessionstate 主要是让 session 保存在数据库中。
具体配置如下:

复制代码 代码如下:


decryptionkey="9421e53e196bb56db11b9c25197a2ad470638efbc604ac74cd29dbbcf79d6046"
validation="sha1" decryption="aes"/>



网站部分 这样就好了。。。 下面就是要配置据库了…..

数据库配置:
使用aspnet_regsql.exe工具
asp.net 2.0版本后微软提供了aspnet_regsql.exe工具可以方便的配置session数据库.该工具位于 web 服务器上的"系统根目录\microsoft.net\framework\版本号"文件夹中.

使用举例:

aspnet_regsql.exe -s . -u sa -p 123456 -ssadd -sstype p
-s参数:
表示数据库实例名称. 可以用"."表示本机.
-u和-p参数:
表示用户名和密码.
-e参数:
可以再-u –p 与 -e中选择一组. –e表示以当前系统用户通过windows身份验证登录数据库, -u -p则是使用sqlserver用户登录数据库.
-ssadd / –ssremove 参数:
-ssadd表示是添加session数据库, -ssremove表示移除session数据库.
sstype 参数说明:
t
将会话数据存储到 sql server tempdb 数据库中。这是默认设置。如果将会话数据存储到 tempdb 数据库中,则在重新启动 sql server 时将丢失会话数据。

将会话数据存储到 aspstate 数据库中,而不是存储到 tempdb 数据库中。
c
将会话数据存储到自定义数据库中。如果指定 c 选项,则还必须使用 -d 选项包括自定义数据库的名称。
我的设置是:aspnet_regsql.exe -s . - e -d awbuisession -ssadd -sstype c

好了。基本的 我们就已经搞定了。。
现在 我们分别把我们刚建的一个网站 部署 到 iis 中。不过我们既然要负载。至少也的部署两份。

nginx怎么实现负载均衡多站点共享Session 

我们把 其中一个 服务器中的 defaut.aspx 中 “服务器 1” 改成 “服务器 2” ,这样做的主要目地是 做一下 区别! 

具体如下:

 nginx怎么实现负载均衡多站点共享Session

两个网站的 url分别是:

 server 1:127.0.0.1:8081;

server 2:127.0.0.1:8080;   

ok。下面我们就是 配置 nignx了。

首先 在 nginx\conf 配置  文件中找到 nginx.conf 这个文件 ,就记事本打开, 

nginx怎么实现负载均衡多站点共享Session 

做如上的 设置:

ok。  nginx  这样配置 就算ok 了。 我们启动一下 nginx ..

在浏览器中 输入我们 在 nginx 中配置的 url 如:127.0.0.1:8090 

nginx怎么实现负载均衡多站点共享Session 

我们会看到 服务器 1 已经开始为我们服务了,我们再点一下 “setsession”来设置一下一个 会话值,

nginx怎么实现负载均衡多站点共享Session

我们会看到 服务器 2 开始 工作。这时我们再点一下 “getsesion”看一下 刚才在 服务器 1 设置 的会话值,结果如下 : 

nginx怎么实现负载均衡多站点共享Session

出现这种情况 ,主要就是在数据库中存储 一个会话时 没有做到 服务器1 和服务2的session 共享,主要是 在 

nginx怎么实现负载均衡多站点共享Session

aspstatetempsessions 这个表中的 一个sessionid ,

其中的sessionid包括两个部分:网站生成的24位sessionid及8位appname对于不同的站点,其appname不同,在能够在不同站点下使24位sessionid相同的情况下,要保证经过组合加上appname后的sessionid相同,可以通过修改存储过程tempgetappid,使其得到的sessionid与appname无关,修改tempgetappid如下:

复制代码 代码如下:


alter procedure [dbo].[tempgetappid]
@appname tappname,
@appid int output
as
set @appname = 'test' --lower(@appname) 修改这里,使多个站点的appname ,为一个固定值。
set @appid = null
select @appid = appid
from [awbuisession].dbo.aspstatetempapplications
where appname = @appname
if @appid is null begin
begin tran
select @appid = appid
from [awbuisession].dbo.aspstatetempapplications with (tablockx)
where appname = @appname
if @appid is null
begin
exec gethashcode @appname, @appid output
insert [awbuisession].dbo.aspstatetempapplications
values
(@appid, @appname)
if @@error = 2627
begin
declare @dupapp tappname
select @dupapp = rtrim(appname)
from [awbuisession].dbo.aspstatetempapplications
where appid = @appid
raiserror('sql session state fatal error: hash-code collision between applications ''%s'' and ''%s''. please rename the 1st application to resolve the problem.',
18, 1, @appname, @dupapp)
end
end
commit
end
return 0


经过以上修改之后,下面要实现多个站点共用同一个sessionid.

重启一下各站点。再在浏览一下网站 

nginx怎么实现负载均衡多站点共享Session

点 “setsession”, 

nginx怎么实现负载均衡多站点共享Session

再点:“getsession” 

nginx怎么实现负载均衡多站点共享Session

这样 我们就看到 服务器2 给出了我们 刚才在 服务器 1 中设置 的会话值了。

我们 再点:“getsession”, 

nginx怎么实现负载均衡多站点共享Session

可以看到  服务器1 和服务器 2 返回的是相同的结果,达到了 “多站点共享session”

 附加一点: session 过期删除,主要是 在 sql server 代理中的  作业完成。

nginx怎么实现负载均衡多站点共享Session

以上是nginx怎么实现负载均衡多站点共享Session的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

linux怎么启动nginx linux怎么启动nginx Apr 14, 2025 pm 12:51 PM

在 Linux 中启动 Nginx 的步骤:检查 Nginx 是否已安装。使用 systemctl start nginx 启动 Nginx 服务。使用 systemctl enable nginx 启用在系统启动时自动启动 Nginx。使用 systemctl status nginx 验证启动是否成功。在 Web 浏览器中访问 http://localhost 查看默认欢迎页面。

nginx在windows中怎么配置 nginx在windows中怎么配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安装 Nginx 并创建虚拟主机配置。修改主配置文件并包含虚拟主机配置。启动或重新加载 Nginx。测试配置并查看网站。选择性启用 SSL 并配置 SSL 证书。选择性设置防火墙允许 80 和 443 端口流量。

linux怎么查看nginx是否启动 linux怎么查看nginx是否启动 Apr 14, 2025 pm 12:48 PM

在 Linux 中,使用以下命令检查 Nginx 是否已启动:systemctl status nginx根据命令输出进行判断:如果显示 "Active: active (running)",则 Nginx 已启动。如果显示 "Active: inactive (dead)",则 Nginx 已停止。

nginx403错误怎么解决 nginx403错误怎么解决 Apr 14, 2025 pm 12:54 PM

服务器无权访问所请求的资源,导致 nginx 403 错误。解决方法包括:检查文件权限。检查 .htaccess 配置。检查 nginx 配置。配置 SELinux 权限。检查防火墙规则。排除其他原因,如浏览器问题、服务器故障或其他可能的错误。

怎么查看nginx是否启动 怎么查看nginx是否启动 Apr 14, 2025 pm 01:03 PM

确认 Nginx 是否启动的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 检查端口 80 是否开放;3. 查看系统日志中 Nginx 启动消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

怎么解决nginx跨域问题 怎么解决nginx跨域问题 Apr 14, 2025 am 10:15 AM

解决 Nginx 跨域问题有两种方法:修改跨域响应头:添加指令以允许跨域请求,指定允许的方法和头,以及设置缓存时间。使用 CORS 模块:启用模块并配置 CORS 规则,允许跨域请求、方法、头和设置缓存时间。

nginx403怎么解决 nginx403怎么解决 Apr 14, 2025 am 10:33 AM

如何解决 Nginx 403 Forbidden 错误?检查文件或目录权限;2. 检查 .htaccess 文件;3. 检查 Nginx 配置文件;4. 重启 Nginx。其他可能原因还包括防火墙规则、SELinux 设置或应用程序问题。

怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

See all articles