问题:前因是美文苑阅读网有开发即时聊天,经常一边开后台一边前端登陆退出多个账号!经常出现websocket链接不上!特此有空修复下!顺便记录下来有需要的避免踩坑。
原因:由于前端cookie都时经过加密且本站采用了顶级域名进行作用域会携带cookie。所以导致长度大小会很大。此时nginx代理。如果是跨域代理的话不会携带cookie,但是如果是同源代理的话会携带cookie。nginx默认请求头大小为1k ,此时因为cookie导致大小溢出,导致连接websocket 时会fail失败。
解决方案:
1、忽略cookie信息
由于cookie信息后端时不用的。所以我选择了这个加到网站的NG配置文件里面。
附本站即时通讯聊天的NGINX完整的反向代理代码:端口号根据自己的后台与服务器自定。
这样就能有效避免同域带上cookie有时候会WSS链接不上哦!经过实测,确实是有效的!先把本站聊天室的功能再次说明以下。
帝国CMS即时通讯聊天插件非ajax轮循,具有像QQ即时聊天功能,收发信息能及时推送。聊天体验更佳。
V1.0版本具体功能如下:
1,非会员乃游客的或无登录注册用户的不能发送聊天信息。(完美结合网站自带的会员数据,更方便管理,也有预留需要会员实名认证或者高级会员才可以聊天)
2,实时查看在线聊天用户。
3,聊天消息内容与用户在线记录存Mysql数据库与Redis(服务器需要开启)。(首次登陆聊天系统方便显示过往的聊天记录与查看最近24小时登陆到聊天系统的用户)
4,聊天工具栏里面增加个人资料查询,定位发送,本地天气查询,打赏,表情,24小时内登陆注册用户列表,截屏等小功能。
5,支持心跳检测方便与服务器长期建立链接,突破Nginx默认的1分钟。(不建议修改proxy_read_timeout参数,因为影响服务器整体性能)
6,使用Websocket全双工协议,更小带宽,更好性能。(聊天核心程序采用多线程多进程并发数量更强大)
7,防止页面多次刷新或者新开多个同页面的时候同一在线用户多次重复保存到在线人数的数据表,系统只允许同用户名同一时间只保存一次到数据表!在线人数显示更准确。
8,纯PHP开发,无需任何组件。跨系统完美支持linux系统与windows系统。注:windows系统运行性能会差!
9,后台实时查看聊天记录(方便管理聊天信息)后台实时查看在线人数与聊天记录总数,运行日志,聊天室运行时间以及聊天室相关配置设置。
10,所有Mysql入库字段均采用帝国CMS的入库函数进行过滤(更安全)。
11,用户在线数据表与聊天记录表均采用ID为自增值,查询更为高效。
12,错误日志记录生成,查看程序出错更方便更便捷。
V2.0版本具体功能如下:(主要是BUG修复)
1,新增聊天记录加载更多,(采用AJAX无刷新对于大数据体验更好,接口已采用redis缓存)。
2,新增截屏粘贴图片快速上传。
3,新增消息内容含有图片进行预处理,让美美的图片还原在聊天信息框。
4,socket即时通讯主程序类函数Mysql长连接优化,Redis缓存聊天记录优化,(彻底解决8小时无数据读写Mysql自动断开)
5,新增在线用户弹幕。新增聊天室启动时间与用户IP归属城市,新增上线与消新息声音分别提醒,新增分享二维码生成,新增缓存删除,新增图片上传,(均集成到聊天工具栏)。优化更换聊天界面背景,优化音乐播放,优化Redis缓存读取,优化用户在线,优化个人资料卡,优化截屏等。
6,新增美丽大气的聊天UI界面
7,增加AI智能机器人
8,修复低概率偶尔链接不上服务器
原因:由于前端cookie都时经过加密且本站采用了顶级域名进行作用域会携带cookie。所以导致长度大小会很大。此时nginx代理。如果是跨域代理的话不会携带cookie,但是如果是同源代理的话会携带cookie。nginx默认请求头大小为1k ,此时因为cookie导致大小溢出,导致连接websocket 时会fail失败。
解决方案:
1、忽略cookie信息
由于cookie信息后端时不用的。所以我选择了这个加到网站的NG配置文件里面。
2、修改nginx请求头默认大小,这里是修改NGINX总配置文件
- // 一种是覆盖
- proxy_set_header Cookie "la=1";
- //一种是忽略
- proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
综上所述,小编建议第一种方法!修改网站的NGINX配置文件是非常的保险!即时出错删除就可以了!
- #client_header_buffer_size 8k;
- #large_client_header_buffers 4 32k;
附本站即时通讯聊天的NGINX完整的反向代理代码:端口号根据自己的后台与服务器自定。
- location /wss {
- proxy_pass http://127.0.0.1:端口号;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- rewrite /wss/(.*) /$1 break;
- proxy_set_header Cookie "la=1";
- proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
- proxy_redirect off;
- }
这样就能有效避免同域带上cookie有时候会WSS链接不上哦!经过实测,确实是有效的!先把本站聊天室的功能再次说明以下。
帝国CMS即时通讯聊天插件非ajax轮循,具有像QQ即时聊天功能,收发信息能及时推送。聊天体验更佳。
V1.0版本具体功能如下:
1,非会员乃游客的或无登录注册用户的不能发送聊天信息。(完美结合网站自带的会员数据,更方便管理,也有预留需要会员实名认证或者高级会员才可以聊天)
2,实时查看在线聊天用户。
3,聊天消息内容与用户在线记录存Mysql数据库与Redis(服务器需要开启)。(首次登陆聊天系统方便显示过往的聊天记录与查看最近24小时登陆到聊天系统的用户)
4,聊天工具栏里面增加个人资料查询,定位发送,本地天气查询,打赏,表情,24小时内登陆注册用户列表,截屏等小功能。
5,支持心跳检测方便与服务器长期建立链接,突破Nginx默认的1分钟。(不建议修改proxy_read_timeout参数,因为影响服务器整体性能)
6,使用Websocket全双工协议,更小带宽,更好性能。(聊天核心程序采用多线程多进程并发数量更强大)
7,防止页面多次刷新或者新开多个同页面的时候同一在线用户多次重复保存到在线人数的数据表,系统只允许同用户名同一时间只保存一次到数据表!在线人数显示更准确。
8,纯PHP开发,无需任何组件。跨系统完美支持linux系统与windows系统。注:windows系统运行性能会差!
9,后台实时查看聊天记录(方便管理聊天信息)后台实时查看在线人数与聊天记录总数,运行日志,聊天室运行时间以及聊天室相关配置设置。
10,所有Mysql入库字段均采用帝国CMS的入库函数进行过滤(更安全)。
11,用户在线数据表与聊天记录表均采用ID为自增值,查询更为高效。
12,错误日志记录生成,查看程序出错更方便更便捷。
V2.0版本具体功能如下:(主要是BUG修复)
1,新增聊天记录加载更多,(采用AJAX无刷新对于大数据体验更好,接口已采用redis缓存)。
2,新增截屏粘贴图片快速上传。
3,新增消息内容含有图片进行预处理,让美美的图片还原在聊天信息框。
4,socket即时通讯主程序类函数Mysql长连接优化,Redis缓存聊天记录优化,(彻底解决8小时无数据读写Mysql自动断开)
5,新增在线用户弹幕。新增聊天室启动时间与用户IP归属城市,新增上线与消新息声音分别提醒,新增分享二维码生成,新增缓存删除,新增图片上传,(均集成到聊天工具栏)。优化更换聊天界面背景,优化音乐播放,优化Redis缓存读取,优化用户在线,优化个人资料卡,优化截屏等。
6,新增美丽大气的聊天UI界面
7,增加AI智能机器人
8,修复低概率偶尔链接不上服务器