当前位置: 首页 > news >正文

wordpress全站加速可以下载的网站模板

wordpress全站加速,可以下载的网站模板,网站系统分析报告,厚街手机网站建设consul的服务注册与发现 如果不知道consul的使用#xff0c;可以点击上方链接#xff0c;这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道#xff0c;配置upstream可以实现负载均衡#xff0c;而consul实现了服务注册与发现#xff0c;那么接下来…consul的服务注册与发现 如果不知道consul的使用可以点击上方链接这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道配置upstream可以实现负载均衡而consul实现了服务注册与发现那么接下来我们就来看看利用这两个组件怎么实现负载均衡吧。 安装consul docker安装consul注意端口,注意将consul的网络加入到kong的网络中即--networkkong-ee-net docker run -d --name consul \--networkkong-ee-net \-p 8500:8500 \-p 8300:8309 \-p 8301:8301 \-p8302:8302 \-p 8600:8600/udp \hashicorp/consul consul agent -dev -client0.0.0.0gin服务注册到consul 我们启动3个gin服务并注册到consul中相关代码如下注意服务端口是随机获取的并注册到consul中我们几乎不需要关心端口是多少 package main import (fmtgin-demo/configgin-demo/dbgin-demo/routegin-demo/utilsgithub.com/fvbock/endlessconsulapi github.com/hashicorp/consul/api ) // 定义服务注册的信息 type ServiceConfig struct {ID stringName stringTags []stringPort intAddress string }// consul的服务地址 var consulIp 127.0.0.1:8500// 注册 func RegisterSevice(s ServiceConfig) error {consulConfig : consulapi.DefaultConfig()consulConfig.Address consulIp//获取到客户端client, err : consulapi.NewClient(consulConfig)if err ! nil {fmt.Printf(create consul client : %v\n, err.Error())return err}registration : consulapi.AgentServiceRegistration{ID: s.ID,Name: s.Name,Port: s.Port,Tags: s.Tags,Address: s.Address,}if err : client.Agent().ServiceRegister(registration); err ! nil {fmt.Printf(register to consul error: %v\n, err.Error())return err}return nil }func main() {//配置文件config.InitConfig()//sql初始化db.NewDb().InitAllSql()//启动r : route.InitRoute()//随机获取一个可用端口_, port : utils.RandomPort()//注册到consulconsulPort : fmt.Sprintf(%d, port)service : ServiceConfig{ID: consulPort,Name: blog_service,Tags: []string{blog},Port: port,Address: 192.168.11.20,}err : RegisterSevice(service)if err ! nil {fmt.Printf(register to consul error: %v\n, err.Error())}//启动gin服务addr : fmt.Sprintf(:%d, port)err endless.ListenAndServe(addr, r)if err ! nil {return} } 启动完毕之后我们访问consul的web页面已注册成功http://127.0.0.1:8500/ui/dc1/services/blog_service/instances 我们使用dns的方式访问一下 dig 127.0.0.1 -p 8600 blog_service.service.consulkong里面配置consul 通过docker network inspect kong-ee-net 查看consul的ip为172.23.0.4这里我们需要删除原来的kong容器并使用以下命令创建一个新看kong需要注意的是由于你指定了KONG_DNS_RESOLVER那么原来指定的KONG_PG_HOST就不可以再用dns的方式因为consul里面并没有这个域名会导致服务启动报错。所以要直接指定ip。 docker run -d --name kong \--networkkong-ee-net \-e KONG_DATABASEpostgres \-e KONG_DNS_RESOLVER192.168.11.20:8600 \-e KONG_PG_HOST172.23.0.2 \-e KONG_PG_USERkong \-e KONG_PG_PASSWORDkong \-e KONG_CASSANDRA_CONTACT_POINTSkong-database \-e KONG_PROXY_ACCESS_LOG/dev/stdout \-e KONG_ADMIN_ACCESS_LOG/dev/stdout \-e KONG_PROXY_ERROR_LOG/dev/stderr \-e KONG_ADMIN_ERROR_LOG/dev/stderr \-e KONG_ADMIN_LISTEN0.0.0.0:8001, 0.0.0.0:8444 ssl \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong-oss:latest启动之后我们会再konga里面看到下面这行这个时候我们在kong里面配置的域名都会被 consul解析 我们配置blog_service.service.consul给service就是咱们原来创建的blog的service 我们现在多访问几次接口 http://127.0.0.1:8000/v1/blog/detail?id12返回数据正常我们多访问几次查看三台服务的日志均收到了请求 jwt实现权限校验 一般情况下上游api服务都需要客户端有身份验证并且不影响错误的请求或者无认证的请求通过那么此时我们可以利用kong的jwt插件来实现直接在网关这一层过滤掉请求 consumers 一个consumer可以代表一个微服务或者一个应用。为什么因为你想给一个应用配置插件服务的话比如说jwt认证这个插件怎么样才能作用到这个应用上面呢就是需要创建一个consumer插件作用于consumerconsumer绑定应用。 接下来我们创建一个consumer 添加jwt认证 全局配置jwt配置header头的token名 此时我们再来访问http://127.0.0.1:8000/v1/blog/detail?id12已经不通过了 那么我们先手动构造一个token来验证一下有两点需要注意一个是jwt是我们配置的验证名称一个是iss 我们通过https://jwt.io/生成token,payload如下注意secret去consumer中获取 {sub: 1234567890,name: John Doe,iat: 1516239022,iss:jwt }项目中引入jwt 关于怎么使用jwt我在jwt讲解这篇文章中说过。注意两个地方一个是jwt的秘钥kong和gin必须保持一致一个是issuer必须保持一致相关代码如下 package middlewareimport (gin-demo/servicegithub.com/gin-gonic/gingithub.com/golang-jwt/jwt/v5logstringstime )// 定义自己的秘钥 所有的服务必须用一个秘钥才能正确解析token // 注意注意:这个秘钥必须和kong保持一致 var privateKey []byte(FLHzZzGqZPlSzKgNyq4wXg4bKUhFRsH1)// UserClaims 我们声明一个结构体,里面包含我们想要保存的信息 type UserClaims struct {Uid int64jwt.RegisteredClaims // 内嵌标准的声明 }// GenToken 生成token func GenToken(uid int64) (string, error) {//初始化结构体claims : UserClaims{Uid: uid,RegisteredClaims: jwt.RegisteredClaims{//设置过期时间ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Second * 3600)),//颁发时间IssuedAt: jwt.NewNumericDate(time.Now()),//主题Subject: Token,//注意这里 发行人要和kong保持一致Issuer: jwt,},}//生成token 使用hs256 加密 结构体,然后再用秘钥对其做数字签名return jwt.NewWithClaims(jwt.SigningMethodHS256, claims).SignedString(privateKey) }// 解析token func ParseToken(c *gin.Context) {claims : new(UserClaims)xtoken : c.GetHeader(x-token)tokenString : strings.Split(xtoken, )if len(xtoken) 0 || len(tokenString) 2 {service.ErrorResponse(c, 9999, 请先登录!)return}log.Printf(解析到的token是:%v, tokenString)token, err : jwt.ParseWithClaims(tokenString[1], claims, keyFunc)log.Printf(解析到的token是:%v, err)if err ! nil {c.Abort()service.ErrorResponse(c, 9999, 用户名密码错误!)return}//建议token是否有效if token.Valid {log.Printf(解析到的uid是:%d, claims.Uid)c.Set(uid, claims.Uid)c.Next()} else {c.Abort()service.ErrorResponse(c, 9999, 用户名密码错误!)return} }func keyFunc(token *jwt.Token) (interface{}, error) {return privateKey, nil } 结果 失败结果kong直接拦截并未到达服务层实例 流量控制 我们现在来配置一个每秒接收5个请求的限制 然后我们用jmeter测试一下一秒内模拟10个用户发送10个请求 查看结果 黑白名单 我们可以选择指定给service或者route添加插件下图我给route添加了插件 再次访问接口 总结 kong的相关功能就演示完毕了其他功能比如反爬策略协议转换感兴趣的小伙伴们可以自己探索一下。 相关参考 相关参考 相关参考 官方文档 中文文档 相关文档 相关文档
http://www.yingshimen.cn/news/88644/

相关文章:

  • 公司做网站找谁制作app下载
  • 做网站首页多少钱关于网站设计的新闻
  • 南宁网站关键词推广怎么样免费做网站
  • qq业务代理网站建设广告设计作品
  • 做字的网站网页设计心得体会300字
  • 网站设计 知识产权元宇宙app技术开发
  • wps演示做的和网站导航网站设计包括哪些步骤
  • 个人网站可以做品牌推广向总部建设网站申请书
  • 品牌设计网站有哪些做肮脏交义的网站
  • 中国建设银行官网站大同使用WordPress没有发布按钮
  • 网站开发可能性分析wordpress 4.8教程
  • 建设专业网站哪家更专业vi系统设计一般多少钱
  • 上海网站怎么备案深圳做人工智能芯片的公司
  • 简述网站内容如何优化百度网站优化排行
  • 网站排名优化怎么样免费高清图片素材网站有哪些
  • 产品经理如何做p2p网站改版织梦旅游网站
  • 自已建个人网站站长工具在线
  • 网站服务器和ftp空间网站建设海报设计
  • 住房建设部官方网站wordpress gallery widget
  • 建设企业网站收费吗网络安全方案设计步骤
  • 十大旅游网站排名做搜索的网站
  • 网站前端交互功能案例分析阿里巴巴建设电子商务网站目的
  • 如何维护给做网站的客户拥有响应式网站
  • 什么是软文营销辽阳seo
  • 四站合一网站制作wordpress能做成手机吗
  • 可以做超链接或锚文本的网站有哪些价格低性能好的手机
  • 国外优秀企业网站模板深圳营销型企业网站
  • 苏州做企业网站自己做网站还是公众号
  • 好习惯网站微信小程序商城怎么开通
  • 网站服务器出错是什么意思易思网站系统