外国知名个人网站,网页开发人员招聘,建设信用卡网银网站,简阳seo排名优化培训文章目录 一#xff0c;通过域名访问商城架构设计1#xff0c;为什么nginx要将请求转发给网关2#xff0c;架构设计 二#xff0c;配置1#xff0c;nginx配置1.1 nginx.conf1.2 gulimall.conf1.3 配置原理 2#xff0c;网关配置 三#xff0c;记录2个问题1#xff0c;网… 文章目录 一通过域名访问商城架构设计1为什么nginx要将请求转发给网关2架构设计 二配置1nginx配置1.1 nginx.conf1.2 gulimall.conf1.3 配置原理 2网关配置 三记录2个问题1网关路由匹配实现2网关路由配置前后顺序导致的问题3nginx.conf upstream配置缺少端口 一通过域名访问商城架构设计
1为什么nginx要将请求转发给网关
上一节实现通过Nignx将域名gulimall.com的请求直接转发给产品服务这样的设计有比较大的缺陷
管理复杂性如果需要更改服务的路由规则或负载均衡策略可能需要在多个地方更新配置。安全性风险直接暴露服务的IP地址可能会增加安全风险。
更好的方式是nginx将请求转发给网关由网关实现路由转发和负载均衡。转发给网关的优势如下
统一入口Nginx作为反向代理服务器提供了一个统一的入口点所有外部请求首先到达Nginx。安全性隐藏了后端服务的真实IP地址增加了系统的安全性。灵活性可以在Nginx层面进行请求的路由、负载均衡、SSL终端等操作。可扩展性易于添加新的服务或修改现有服务的路由规则而不需要更改客户端的访问方式。
2架构设计 根据图片当我们在浏览器输入gulimall.comnginx将这个请求转发给网关原理如下 本地DNS解析hosts文件 在Windows系统的hosts文件中配置域名与虚拟机IP的映射关系。例如gulimall.com、search.gulimall.com、item.gulimall.com和member.gulimall.com都被指向同一个虚拟机IP地址。这样当在浏览器中输入这些域名时系统会将它们解析到指定的虚拟机IP。 Nginx作为网关 Nginx被配置为一个网关用于接收来自上述域名的所有请求。 server块配置 在Nginx配置中定义了一个server块来监听域名gulimall.com的80端口。这意味着所有HTTP请求都会首先到达这个server块。 反向代理配置location块 在server块中定义了一个location块用于匹配根路径/的请求。使用proxy_pass指令将请求转发到内部网络的特定服务上这里是转发到http://192.168.56.1:10000即商品服务所在的地址。 请求处理 当用户访问gulimall.com时请求首先被发送到配置在hosts文件中的虚拟机IP。虚拟机上的Nginx监听80端口接收到请求后根据配置的location块将请求转发到内部的商品服务。
二配置
1nginx配置
nginx修改两处配置
在nginx全局配置文件nginx.conf中配置服务器地址在server块配置文件gulimall.conf中配置负载均衡配置
1.1 nginx.conf 在nginx.conf中做如下配置。 upstream gulimall{server 192.168.56.1:88;} 1.2 gulimall.conf 在conf.d目录下的gulimall.conf做如下配置。 location / {proxy_pass http://gulimall;} 注意配置完成要重启docker容器。
1.3 配置原理 location / { … } 这个location块定义了对于根路径/的请求的处理方式。location块可以包含在server块内用于匹配特定的URI或路径。location /表示匹配所有以根路径开始的请求。 proxy_pass http://gulimall; proxy_pass指令用于设置请求的代理转发目标。这里它指定了请求应该被转发到名为gulimall的上游服务器组upstream。注意这里的http://是可选的因为proxy_pass默认就是HTTP代理。 upstream gulimall { … } upstream块定义了一个服务器组的名称和一组后端服务器的地址。在这个例子中gulimall是服务器组的名称。在upstream gulimall块内使用server指令来指定后端服务器的地址和端口。这里的server 192.168.56.1;表示将请求代理到IP地址为192.168.56.1的服务器。默认情况下如果没有指定端口则使用80端口。
这两段配置是如何起作用的
当一个请求到达Nginx并且请求的URI是根路径/时Nginx会根据配置的location /块来处理这个请求。在location /块中proxy_pass指令告诉Nginx将请求转发到名为gulimall的上游服务器组。Nginx查找upstream gulimall块找到后端服务器的列表。在这个例子中只有一个服务器即IP地址为192.168.56.1的服务器。Nginx将请求转发到这个后端服务器由它来处理请求并返回响应。
这种配置方式允许Nginx作为一个反向代理服务器将请求分发到不同的后端服务。使用upstream可以方便地进行负载均衡和故障转移等操作而proxy_pass则定义了具体的请求转发行为。
2网关配置
在网关服务的配置文件中增加如下配置。 - id: gulimall-index-routeuri: lb://gulimall-productpredicates:- Host**.gulimall.com这段配置的作用是
当API网关接收到一个HTTP请求时它会检查请求的Host头部。如果Host头部匹配**.gulimall.com的模式即任何子域名的gulimall.com则这个请求将被路由到名为gulimall-product的服务。请求将通过负载均衡器发送到后端服务实例以实现请求分发和故障转移。
配置完成重启网关。
三记录2个问题
1网关路由匹配实现
在网关中配置工具域名来进行路由转发测试发现并未生效原因是nginx转发请求会丢失域名信息需要在nginx的server块配置文件gulimall.conf中配置中重设请求头域名信息配置如下。 location / {proxy_set_header Host $host;proxy_pass http://gulimall;}2网关路由配置前后顺序导致的问题
如果将下列配置放在路由配置的最前面将会出现一些问题。 路由规则gulimall-index-route使用Host谓词匹配所有以.gulimall.com结尾的请求。
如果这个规则gulimall-index-route放在最前面可能出现的问题包括 匹配优先级问题 路由规则是从上到下匹配的一旦匹配成功就不会再考虑下面的规则。如果gulimall-index-route放在最前面所有.gulimall.com的请求都会被这个规则捕获即使这些请求的路径可能更适合下面的某个Path谓词规则。 路径路由失效 由于gulimall-index-route会捕获所有.gulimall.com的请求其他基于特定API路径如/api/search/**、/api/coupon/**等的路由规则将不会生效因为请求在到达这些规则之前已经被gulimall-index-route匹配并路由了。 服务发现问题 如果gulimall-product服务不能处理所有可能的API请求例如它不包含搜索、优惠券、库存等API的实现那么将所有请求都路由到这个服务将导致错误或不期望的响应。
3nginx.conf upstream配置缺少端口
重启nginx和网关后仍然不能正常访问页面查看nginx日志发现转发到80端口而网关是在88端口说明配置nginx.conf中upstream配置缺少端口。
如下图修改之后即能正常访问。