前端根据域名发送请求通过nginx匹配转发至java网关gateway

1.图片请求展示:

2.流程阐述

当发起请求 https://test.parkidcode.net/api/asset/parkAccess/page 时,请求的处理流程如下:

  1. HTTPS请求:首先,通过HTTPS协议发送请求到 https://test.parkidcode.net/api/asset/parkAccess/page。由于域名配置了SSL证书,因此请求会被加密并发送到服务器。

  2. Nginx接收请求:Nginx作为反向代理服务器接收到这个HTTPS请求。由于请求路径以 /api/ 开头,它符合 location ^~/api/ 的配置,因此该请求将被转发到后端服务。

  3. 请求转发到Gateway:根据 proxy_pass http://park-gateway:9997/; 的配置,Nginx会将请求转发到 park-gateway 服务的 9997 端口。注意这里的 / 后缀意味着原始请求的URL路径(除了 /api/ 部分)将保持不变。因此,请求 https://test.parkidcode.net/api/asset/parkAccess/page 会被转发为 http://park-gateway:9997/asset/parkAccess/page

  4. Gateway处理请求park-gateway 服务接收到请求后,会根据其内部配置的路由规则进行处理。在这个例子中,Gateway的配置中有一个断言 Path=/v3/api-docs/**,这意味着它原本只匹配以 /v3/api-docs/ 开头的路径。由于你的请求路径是 /asset/parkAccess/page,它不符合这个断言,因此不会匹配到 predicates 中定义的 openapi 路由。

  5. 路由匹配问题:实际上,如果Gateway的配置只有上述的断言,那么请求 /asset/parkAccess/page 将不会匹配任何定义的路由规则,除非有其他未提及的路由配置。通常,Gateway应该有一个通配符路由或默认路由来处理不符合特定断言的请求。

  6. 请求处理与转发:一旦请求匹配到合适的路由规则(如果有的话),Gateway会根据路由规则中的配置对请求进行处理,这可能包括身份验证、限流、请求和响应处理等。然后,Gateway会将请求转发到相应的微服务实例。

  7. 微服务处理请求:最终,匹配的后端微服务会接收到来自Gateway的转发请求,并执行相应的业务逻辑,然后返回响应。

  8. 响应返回:微服务处理完请求后,将响应返回给Gateway,Gateway再根据需要将响应转发回Nginx,最终由Nginx将响应返回给客户端。

在案例中,由于请求的路径 /api/asset/parkAccess/page 不符合Gateway中定义的断言 Path=/v3/api-docs/**,因此你需要检查Gateway是否有其他匹配的路由规则。如果没有,你需要相应地调整路由配置以确保请求能够被正确路由和处理。

3.nginx和gateway配置文件

nginx配置文件

  server {
    # listen 80;
    # server_name localhost;

    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on
    listen 443 ssl;
    #listen 443;
    # 开启ssl
    ssl on;
    #替换你自己的域名
    server_name test.parkidcode.net parkidcode.net;
    # 配置ssl证书,替换你自己下载的nginx证书,可以是相对路径或绝对路径
    ssl_certificate /www/server/panel/vhost/nginx/cert/test.parkidcode.net.pem;
    # 配置证书秘钥,系统生成=》替换你自己下载的nginx密钥,手动填写=》需要你通过openssl生成密钥上传,
    ssl_certificate_key /www/server/panel/vhost/nginx/cert/test.parkidcode.net.key;
    # ssl会话cache
    ssl_session_cache shared:SSL:1m;
    # ssl会话超时时间
    ssl_session_timeout 5m;
    # 配置加密套件,写法遵循 openssl 标准
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    #表示使用的TLS协议的类型
    ssl_prefer_server_ciphers on;

    gzip on;
    gzip_static on;     # 需要http_gzip_static_module 模块
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css;
    gzip_vary on;
    gzip_http_version   1.0; #兼容多层nginx 反代
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # 前端打包好的dist目录文件
    root /www/wwwroot/test_applet-ui;

    location ^~/api/ {
        proxy_pass http://park-gateway:9997/; #注意/后缀
        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }


    # 避免端点安全问题
    if ($request_uri ~ "/actuator"){
        return 403;
    }
}

  server {
    listen 8808;
    server_name localhost;

    gzip on;
    gzip_static on;     # 需要http_gzip_static_module 模块
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css;
    gzip_vary on;
    gzip_http_version   1.0; #兼容多层nginx 反代
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # 前端打包好的dist目录文件
    root /www/wwwroot/test_applet-ui;

    location ^~/api/upark/ {
        proxy_pass http://park-gateway:9997/asset/parkDevice/upark/; #注意/后缀
    }

    location ^~/api/ {
        proxy_pass http://park-gateway:9997/; #注意/后缀
        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto http;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
    }

    # 避免端点安全问题
    if ($request_uri ~ "/actuator"){
        return 403;
    }
}
 

gateway主配置文件

server:
  port: 9997

spring:
  application:
    name: @artifactId@
  cloud:
    nacos:
      username: @nacos.username@
      password: @nacos.password@
      discovery:
        server-addr: ${NACOS_HOST:park-register}:${NACOS_PORT:8848}
      config:
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
  config:
    import:
      - optional:nacos:application-@profiles.active@.yml
      - optional:nacos:${spring.application.name}-@profiles.active@.yml

 nacos配置中的gateway的yml配置文件

gateway:

encode-key: 'Park,kkTTyyPaKr6'

# 验证码相关配置参考: http://t.cn/A647jEdu

aj:

captcha:

cache-type: redis

water-mark: ""

jigsaw: classpath:images/jigsaw

pic-click: classpath:images/pic-click


 

# 固定路由转发配置 无修改

spring:

cloud:

gateway:

globalcors:

corsConfigurations:

"[/**]":

#注意这个设置只对 spring boot 2.4+ 有效, pigx v4.0+ ,低版本 使用 allowedOrigins: "*"

allowedOriginPatterns: "*"

allowed-methods: "*"

allowed-headers: "*"

allow-credentials: true

exposedHeaders: "Content-Disposition,Content-Type,Cache-Control"

routes:

- id: openapi

uri: lb://park-gateway

predicates:

- Path=/v3/api-docs/**

filters:

- RewritePath=/v3/api-docs/(?<path>.*), /$\{path}/$\{path}/v3/api-docs

 

从上面的nacos中的gateway的yml配置文件中可以看到 

确实没有直接定义针对 /api/asset/parkAccess/page 路径的路由规则。然而,该请求能够成功访问 asset 微服务的 parkAccess/page 接口。这可能是由于以下几个原因:

  1. 默认路由:Spring Cloud Gateway 支持默认路由,即当没有匹配的路由规则时,请求会被转发到一个默认的 URI。在您的配置中,如果没有其他匹配的路由,请求可能会被转发到 lb://park-gateway,这是一个负载均衡服务,可能是 asset 微服务的上游服务。

  2. 服务注册与发现:如果 asset 微服务已经注册到服务注册中心(如 Eureka、Consul、Nacos 等),并且 park-gateway 配置了服务发现功能,那么 park-gateway 可能会动态地从服务注册中心获取 asset 微服务的地址,并将请求转发到该服务,即使配置中没有明确的路由规则。

  3. 重写逻辑:虽然配置中有一个重写路径的过滤器,但这个过滤器是针对 /v3/api-docs/** 路径的。对于 /api/asset/parkAccess/page 这个路径,该过滤器不会生效。因此,即使请求路径在转发过程中保持不变,也不会影响它到达正确的微服务。

  4. 网关内部逻辑:在某些情况下,网关可能包含额外的逻辑来处理未明确匹配的请求。这可能包括基于请求头、请求参数或其他条件的路由逻辑。

  5. 负载均衡机制lb://park-gateway 表示一个负载均衡服务。如果 park-gateway 本身是一个代理服务,并且它知道如何将请求路由到 asset 微服务,那么请求可能会被转发到正确的服务实例。

为了确切了解为什么请求能够成功访问 asset 微服务,可能需要检查 park-gateway 的其他配置或实现逻辑,包括它是否配置了默认路由、服务发现功能,以及是否有额外的路由逻辑。此外,查看 park-gateway 的日志也可能提供有关请求处理过程的更多信息。

总结来说,尽管网关配置中没有明确针对 /api/asset/parkAccess/page 路径的路由规则,但由于上述原因之一或多个,请求仍然能够成功转发到 asset 微服务。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/427173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西交大轴承振动数据集的多通道推送例程

1说明 西交大轴承振动数据集XJTU-SY滚动轴承加速寿命试验数据集解读预测与健康管理对保障机械装备安全服役、提高生产效率、增加经济效益至关重要。高质量的全寿命周期数据是预测与健康管理领域的基础性资源&#xff0c;这些数据承载着反映装备服役性能完整退化过程与规律的关…

【活动】金三银四,前端工程师如何把握求职黄金期

随着春意盎然的气息弥漫大地&#xff0c;程序员群体中也迎来了一年一度的“金三银四”求职热潮。这个时间段对于广大前端工程师而言&#xff0c;不仅象征着生机勃发的新起点&#xff0c;更是他们职业生涯中至关重要的转折点。众多知名公司在这一时期大规模开启招聘通道&#xf…

递归实现n的k次方(C语言)

编写一个函数实现n的k次方&#xff0c;使用递归实现。 下面来说一下思路 5的3次方&#xff1a;就是5*(5的3-1次方) 7的4次方&#xff1a;就是7*&#xff08;7的4-1次方&#xff09; 以此类推 n的k次方就是&#xff1a;n* n的&#xff08;k-1&#xff09;次方 int Func(int n,…

mac使用sequl的报错说明

出现下图错误&#xff0c;则到此地址下载test-builds版本 Test Builds 使用 sequel pro 的时候出现了 SequelPro encountered an unexpected error 表现为&#xff1a;测试通过&#xff0c;链接就卡住报错的问题。 解决办法 这是软件的问题&#xff0c;下载使用这个 TEST…

怎么找靠谱游戏开发公司?

在寻找靠谱的游戏开发公司时&#xff0c;有几个关键因素需要考虑。选择合适的游戏开发团队对于确保项目的成功和高质量成果至关重要。以下是一些有助于您找到靠谱游戏开发公司的建议&#xff1a; 首先&#xff0c;评估公司的经验和专业知识是至关重要的。您可以查看公司的历史和…

浅谈去耦电容的作用、选择、布局及其它电容的区别!

在一些文章资料中&#xff0c;去耦电容器被认为是旁路电容器。在其他资料中&#xff0c;去耦电容和旁路电容的区别在于&#xff1a;“旁路电容以输入信号中的干扰为滤波对象&#xff0c;而去耦电容以输出信号的干扰为滤波对象&#xff0c;防止干扰信号返回到输出端。”力量。”…

SpringBootWeb快速入门

1.创建springboot工程&#xff0c;新建module 2.勾选web开发相关依赖 3.删除多余文件 4.新建类 5.启动类中运行main方法 6.启动 默认端口号8080 7.打开浏览器&#xff0c;地址栏输入 8.报错 9.原因&#xff0c;控制层位置放错&#xff0c;剪切controller层放进com.example …

SwiftUI中Alert与ActionSheet的集成

在SwiftUI中&#xff0c;Alert和ActionSheet是两个用于显示提示信息和选项的组件。Alert用于显示简单的提示信息&#xff0c;而ActionSheet用于显示多个选项供用户选择。 要在SwiftUI中使用Alert&#xff0c;首先需要在视图中定义一个State属性来存储是否显示Alert&#xff0c…

【大厂AI课学习笔记NO.58】(11)混淆矩阵

混淆矩阵&#xff08;confusion matrix&#xff09;—— 混淆矩阵&#xff08;Confusion Matrix&#xff09;是人工智能领域&#xff0c;特别是在机器学习和深度学习中&#xff0c;用于衡量分类模型性能的重要工具。它通过统计分类模型的真实分类与预测分类之间的结果&#xf…

【小白学机器学习5】MSE, RMSE,MAE, MAPE, WMAPE

目录 1 评价误差的各种度量指标 2 从误差的评价开始捋这个问题 2.1 误差问题的由来&#xff1a;回归模型预测值和真实值的差距 2.2 如何评价某函数的预测值是否足够好&#xff1f; 如何比较不同的预测函数的预测值的好坏呢&#xff1f; 2.3 最小二乘法&#xff1a;应该叫最…

Vue——携带参数跳转路由

Vue学习之——跳转路由 前情回顾 当我们进行点击修改时&#xff0c;会进行跳转到修改页面&#xff0c;为了完成回显数据&#xff08;根据对应id查找&#xff09;&#xff0c;我们需要携带对应选择中的id跳转到修改页面&#xff0c;让其进行查找回显 学习useRoute和useRoute…

企业要想构建 AI 竞争力,就必须“私藏”大模型

3 月 3 日&#xff0c;由深圳市产学研合作促进会举办的海峡两岸暨港澳人工智能与机器人发展论坛在深圳市福田区会展中心开幕。极狐GitLab CEO 柳钢受邀出席此次活动&#xff0c;并做了题为 《创新与安全并重&#xff1a;大模型私藏之道》 的主题分享。 人工智能之新曦 自 Chat…

链表理论:基础概念与实战技巧!

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 算法day03_ 59.螺旋矩阵II 目录 推荐阅读链表理论知识单向链表&#xff08;单链表&#xff09;定义单链表单链表添加下一个节点单链表中插入一个节点单链表中删除下一节点遍历单链表 双…

《GitHub新手入门指南:从零开始掌握基本用法》

在现代软件开发和技术社区中,GitHub已经成为了一个不可或缺的平台。它不仅是一个代码托管平台,更是一个技术交流、学习分享的社交平台。但对于初学者来说,GitHub可能会有些令人望而却步。本文将详细介绍GitHub的基本用法,帮助新手快速入门并融入这个充满活力的技术社区。 …

Linux 实现打印彩色进度条

文章目录 预备知识一、理解回车换行二、认识行缓冲1、代码一、二&#xff08;回车换行理解&#xff09;2、代码三、四&#xff08;sleep函数和ffush函数理解&#xff09; 三、简单倒计时1. 倒计时代码2、效果展示 四、进度条1、效果展示2、进度条代码makefileProcessBar.hProce…

从零开始搭建web组态

成果展示&#xff1a;by组态[web组态插件] 一、技术选择 目前只有两种选择&#xff0c;canvas和svg Canvas: 是一个基于像素的渲染引擎&#xff0c;使用JavaScript API在画布上绘制图像&#xff0c;它的优点包括&#xff1a; Canvas渲染速度快&#xff0c;适合处理大量图像和…

【STM32】STM32学习笔记-FLASH闪存(48)

00. 目录 文章目录 00. 目录01. FLASH简介02. 闪存模块组织03. FLASH基本结构04. FLASH解锁05. 使用指针访问存储器06. 程序存储器编程07. 选项字节08. 选项字节编程09. 选项字节擦除10. 器件电子签名11. 附录 01. FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选…

【.NET Core】.NET中的流(Stream)

【.NET Core】.NET中的流&#xff08;Stream&#xff09; 文章目录 【.NET Core】.NET中的流&#xff08;Stream&#xff09;一、流&#xff08;Stream&#xff09;1.1 FileStream类1.2 IsolatedStorageFileStream类1.3 MemoryStream类1.4 BufferedStream类1.5 NetworkStream类…

STM32 (2)

1.stm32编程模型 将C语言程序烧录到芯片中会存储在单片机的flsah存储器中&#xff0c;给芯片上电后&#xff0c;Flash中的程序会逐条进入到CPU中去执行&#xff0c;进而CPU去控制各种模块&#xff08;即外设&#xff09;去实现各种功能。 2.寄存器和寄存器编程 CPU通过控制其…

公司电脑文件防泄密软件——| 中科数安

公司电脑文件防泄密软件是一种专门设计用于保护企业敏感信息和数据安全的软件。这些软件通过采用各种技术手段&#xff0c;如数据加密、访问控制、行为监控等&#xff0c;来防止公司的机密文件、客户资料、财务数据等被非法获取、复制或传播。 www.weaem.com 以下是公司电脑文件…