Gateway

2023-05-16

Gateway—SpringCloud微服务网关组件

一、Spring Cloud Gateway简介

1.为什么要用Gateway?

在微服务架构中,通常一个系统会被拆分为多个微服务,微服务之间的调用可以用OpenFeign,但面对这么多微服务客户端调用会遇到哪些问题呢?

在这里插入图片描述

  1. 每个服务都需要鉴权、限流、跨域访问、权限验证等操作,如果每个微服务各自为战,会很麻烦。

  2. 对于客户端来说,每个微服务都分配一个域名的话,客户端代码会很难维护,而且连接数也会有瓶颈.

  3. 随着一个项目的微服务的增多,后期对微服务进行重构的话,也会变的非常麻烦,需要客户端配合一起修改。

2、Spring Cloud Gateway 的定义

为了解决上面的问题,微服务引入了 网关 的概念,网关为微服务架构的系统提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul。

简单来说:Gateway相当于医院大厅的挂号台,对病人进行引流。

加入网关后结构图:

在这里插入图片描述

3.Spring Cloud Gateway三大组成部分

Route(路由): 是构建网关的基本模型, 由ID ,URI 一系列的断言和过滤器组成。

Predicate (断言): 可以匹配Http 请求中所有的内容(请求头 参数等等) 请求与断言,相匹配则通过当前断言。

Filter(过滤器): 包括全局和局部过滤器 ,可以在请求被路由钱后对请求进行更改。

二、Spring Cloud Gateway快速入门

前面我们学习过Nacos,可以帮助我们管理我们的服务,学习Spring Cloud Gateway时,我们可以直接将Nacos整合进来。

1.项目项目

复制之前的Sentinel项目,在此基础上添加api-gateway子模块

添加入口类

在这里插入图片描述

2.添加Jar包

<!--gateway网关-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<!--由于springcloud2020弃用了Ribbon,因此Alibaba在2021版本nacos中删除了Ribbon的jar包,因此无法通过lb路由到指定微服务,会出现503情况。需要引入springcloud loadbalancer包-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>



<!--其它包-->
<!-- 服务注册与发现  jar包 -->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

<!-- nacos配置中心-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!-- 识别bootstrap.yml文件-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
   <version>3.0.2</version>
</dependency>

3.添加配置文件

GATEWAY-dev.yml

在这里插入图片描述

server:
  port: 9000
spring:
  application:
    name: GATEWAY
  cloud:
    loadbalander:  #注意这里要排除ribbon
      ribbon:
        enable: false
    gateway:
      routes:
        - id: search_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
          filters:
            - StripPrefix=1

注解: http://localhost:9000/search-service/goods http://localhost:8083/goods

routes: 路由/路由数组   当请求满足指定的条件后转发到哪个微服务上

id:    当前路由唯一的标识符 ,有默认值,也可以自定义

uri: 请求最终要被转到的地址 ,lb为load balance,表示负载均衡,比如lb://SEARCH表示请求最终会转发到SEARCH服务,注意 lb://后面的<clientName>一定不要使用下划线,即不要使用比如:my_service这种形式,否则LoadBanancer不会起作用。

predicates:断言,也就是条件判断,- Path=/search-service/表示当客户端访问 http://localhost:9000/search-service/goods时会路由到http://localhost:8083/search-service/goods(我这里的SEARCH路径地址为http://localhost:8083),这个无法访问,需要filters过滤下

filters: 过滤器,在请求传递过程中,对请求做一下处理,比如添加请求头,去掉部分路径等。- StripPrefix=1表示转发之前去掉第一层路由,也就是转发到http://localhost:8083/goods

4.添加bootstrap.yml文件

在这里插入图片描述

spring:
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848
        namespace: dev
        group: DEFAULT_GROUP
        username: nacos
        password: nacos
        prefix: GATEWAY
        file-extension: yml
        shared-configs:
         - common.yml
  config:
    activate:
      on-profile: dev

5.启动

在这里插入图片描述

6.测试:

在这里插入图片描述

7.也可以直接拿nacos服务名为断言

修改GATEWAY-dev.yml配置信息为:

server:
  port: 9000
spring:
  application:
    name: GATEWAY
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    loadbalander:
      ribbon:
        enable: false
    gateway:
      discovery:
        locator:
          enabled: true

spring.cloud.gateway.discovery.locator.enabled=true,表示会拿nacos服务名为断言,也会将服务名进行过滤,从而路由到该服务的请求。所以访问:http://localhost:9000/SEARCH/goods 会路由到http://localhost:8083/goods

在这里插入图片描述

三、 断言

断言就是在进入网关请求之前所做的操作,也就是先执行的程序,和生活中坐车一样,首先必须进行安检,然后查票,验证票最终才可以坐车。

在这里的理解就是:当满足某种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。

1.内置断言

Spring Cloud Gateway可以匹配各种路由,而其内部就包括许多内置的路由断言工厂。所有这些断言都匹配HTTP请求的不同属性。您可以将多个路由断言工厂与逻辑和语句组合在一起使用。

1.1、基于Path路径: Path Route Predicate

Path是最常见的断言请求,匹配指定路径下的请求,可以是具体的请求,也可使用/**表示匹配所有子级请求,配置如下。

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**

配置中匹配了以/search-service开头的请求,如果是其他URL的请求进入系统,会出现错误。

1.2、基于DateTime类型:DateTimePredicate(匹配请求时间)

After Route Predicate(匹配时间后的请求)
After Route Predicate可以匹配ZonedDateTime类型的时间,表示:匹配在指定日期时间之后发生的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - After=2022-07-8T14:00:00+08:00[Asia/Shanghai]

配置中匹配了2022-07-8 14:00:00后的请求,如果是在指定时间之前进入系统的请求,会出现错误。

Before Route Predicate(匹配时间前的请求)
Before Route Predicate可以匹配ZonedDateTime类型的时间,表示:匹配在指定日期时间之前发生的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - Before=2022-07-8T14:00:00+08:00[Asia/Shanghai]

配置中匹配了2022-07-8 14:00:00之前的请求,如果是在指定时间之后进入系统的请求,会出现错误。

Between Route Predicate(匹配时间之间的请求)
Between Route Predicate可以匹配ZonedDateTime类型的时间,由两个ZonedDateTime参数组成,第一个参数为开始时间,第二参数为结束时间,表示:匹配在指定的开始时间与结束时间之内发生的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - Between=2022-07-8T14:00:00+08:00[Asia/Shanghai],2022-07-28T14:00:00+08:00[Asia/Shanghai]

配置中匹配2022-07-8 14:00:00到2022-07-28 14:00:00之内时间段的请求,如果是在指定时间段外的进入系统的请求,会出现错误。

1.3、基于Cookie:Cookie Route Predicate

CookieRoutePredicate由两个参数组成,第一个参数为cookie的Key,第二参数为cookie的Value,表示:匹配指定名称且其值与正则表达式匹配的cookie的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - Cookie=cookieName, \d+

配置中匹配了cookie的Key为cookieName,值为满足\d+的正则表达式请求,如果满足cookieName不满足\d+的请求,会出现错误。

1.4、基于Header:Header Route Predicate

HeaderRoutePredicate由两个参数组成,第一个参数为Header名称,第二参数为Header的Value值,表示:匹配指定名称且其值与正则表达式匹配的Header的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - Header=X-Request-Id, \d+

配置中匹配了Header的名称为X-Request-Id,值为满足\d+的正则表达式请求,如果满足headerName不满足\d+的请求,会出现错误。

1.5、基于Host:Host Route Predicate

HostRoutePredicate参数为请求的Host地址,多个参数使用逗号分割,设置的Host地址可以使用**表示通配符,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Host=**.test1.com,**.test2.com

配置中匹配的Host,可以匹配以test1.com或者test2.com结尾的Host地址,其他Host地址访问会出现错误。

1.6、基于请求方法:Method Route Predicate

MethodRoutePredicate由一个或多个HTTP Method组成,比如:POST、PUT、GET、DELETE,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**          
            - Method=GET,POST

配置中匹配了HTTP Method的类型为GET和POST,如果是其他类型的HTTP Method,会出现错误。

1.7、Query Route Predicate

QueryRoutePredicate由两个参数组成,第一个参数为参数名称,第二参数为参数的值(满足正则即可),表示:匹配指定名称且其值与正则表达式匹配的带参的请求,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**          
            - Query=name,\d+

配置中匹配了参数名称叫做name,值满足\d+的请求,如果不满足\d+,会出现错误。

1.8、基于远程地址:RemoteAddr Route Predicate

RemoteAddrRoutePredicate的参数由CIDR 表示法(IPv4 或 IPv6)字符串组成,配置如下:

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**          
            - RemoteAddr=192.168.1.1/24

配置中可以匹配IP为192.168.1.1–192.168.1.254的值,如果不满足192.168.1.1/24的IP规则,会出现错误。

1.9、基于路由权重:Weight Route Predicate

WeightAddrRoutePredicate由group和weight(权重数值)组成,表示将相同的请求根据权重跳转到不同的uri地址,要求group的名称必须一致,配置如下:

spring:
  cloud:
    gateway:
      locator:
        enabled: true
      routes:
        -id: weight_route1
         uri: lb://SEARCH
         predicates:
          - Path=/weight/**
          - Weight= group3, 1          
        -id: weight_route2
         uri: lb://USERS
         predicates: 
          - Path=/weight/** 
          - Weight= group3, 9 
 

如上配置了两个对于 / weight/** 路径转发的路由定义,这两个路由是同一个权重分组,且 weight_ route1 权重为 1, weight_ route2 权重为9。 对于10个访问/ weight/** 路径的请求来说,将会有9个路由到 weight_ route2,1个路由到 weight_ route1。

2.自定义断言

假设我们需要对访问的用户年龄做限制,只允许18-60岁之间的人来访问。我们可以自己定义断言来实现

2.1 新建一个路由断言工厂MyAgeRoutePredicateFactory

package com.test.apigateway.Predicate;

import com.alibaba.cloud.commons.lang.StringUtils;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;


@Component

// 自定义路由断言工厂

public class MyAgeRoutePredicateFactory extends AbstractRoutePredicateFactory<MyAgeRoutePredicateFactory.Config> {


    public MyAgeRoutePredicateFactory() {
        super(MyAgeRoutePredicateFactory.Config.class);
    }

    // 将配置文件中的值按返回集合的顺序,赋值给配置类
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList(new String[]{"minAge", "maxAge"});
    }

    @Override
    public Predicate<ServerWebExchange> apply(Consumer<Config> consumer) {
        return super.apply(consumer);
    }

    @Override
    public Predicate<ServerWebExchange> apply(Config config) {
        // 创建网关断言对象
        return new Predicate<ServerWebExchange>() {
            // 检查
            @Override
            public boolean test(ServerWebExchange serverWebExchange) {
                // 获取请求参数age,判断是否满足[18, 60)
                MultiValueMap<String, String> queryParams = serverWebExchange.getRequest().getQueryParams();
                String age = queryParams.getFirst("age");
                if (!StringUtils.isEmpty(age) && age.matches("[0-9]+")) {
                    int iAge = Integer.parseInt(age);
                    if (iAge >= config.minAge && iAge < config.maxAge) {
                        return true;
                    }
                }
                return false;
            }
        };
    }

    // 配置类,属性用于接收配置文件中的值
    @Validated
    public static class Config {
        private int minAge;
        private int maxAge;

        public int getMinAge() {
            return minAge;
        }

        public void setMinAge(int minAge) {
            this.minAge = minAge;
        }

        public int getMaxAge() {
            return maxAge;
        }

        public void setMaxAge(int maxAge) {
            this.maxAge = maxAge;
        }
    }
}

要求:

类必须要加上RoutePredicateFactory作为结尾

类必须继承AbstractRoutePredicateFactory

必须声明静态内部类。

2.2 添加Gateway配置信息

    gateway:
      routes:
        - id: myage
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
            - MyAge=18,60
          filters:
            - StripPrefix=1

MyAge即是我们新建断言工厂的前缀名,自动识别的。

2.3 测试

在这里插入图片描述

在这里插入图片描述

四、过滤器

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理。

1.过滤器生命周期

PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

2.局部过滤器

2.1 局部过滤器有哪些?

是指作用在某一个路由上,SpringCloud Gateway内置了很多路由过滤器,他们都是由GatewayFilter的工厂类产生。

在这里插入图片描述

2.2 局部过滤器怎么使用

比如AddRequestParameter GatewayFilter

该过滤器可以给请求添加参数。

比如我在SEARCH服务有一个带有page参数的接口,我想请求网关路由转发的时候给加上一个page=1的参数。

接口如下:

在这里插入图片描述

添加配置信息:

在这里插入图片描述

测试

在这里插入图片描述

再比如前面用过的- StripPrefix=1,表示把请求网关的路径前缀的第一级去掉。

内置过滤器很多,我们这里举一个例子看一下使用方式,其它的可以看帮助手册

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

3.全局过滤器

全局过滤器在系统初始化时就作用于所有的路由,不需要单独去配置。全局过滤器的接口定义类是GlobalFilter,Gateway本身也有很多内置的过滤器。

在这里插入图片描述

比如LoadBalancerClientFilter

该过滤器会解析到以lb://开头的uri,比如这样的配置:

    gateway:
      routes:
        - id: abc
          uri: lb://SEARCH
          predicates:
            - Path=/search-service/**
          filters:
            - StripPrefix=1
            - AddRequestParameter=page,1

它会使用Spring Cloud的LoadBalancerClient 来将 SEARCH服务解析成实际的host和port,重新组装请求的url。

它是作用于全局,而且并不需要配置。

五、Gateway实现日志记录

启用Reactor Netty访问日志:-Dreactor.netty.http.server.accessLogEnabled=true

在这里插入图片描述

测试:

在这里插入图片描述

六、Gateway整合Sentinel实现流控

1.Gateway如何整合Sentinel

1.1.添加jar包

<!-- 导入sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!-- 导入sentinel整合Gateway-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

1.2.添加配置信息

  sentinel:
      transport:
        port: 8888
        dashboard: http://localhost:8080

1.3.测试

启动Sentinel,重启网关微服务,运行一次服务中的接口,再次刷新Sentinel,会出现以下内容,表示整合成功

在这里插入图片描述

2.网关限流

从1.6.0版本开始,Sentinel提供了SpringCloud Gateway的适配模块,可以提供两种资源维度的限流:

route维度:即在配置文件中配置的路由条目,资源名为对应的routeId,这种属于粗粒度的限流,一般是对某个微服务进行限流。

自定义API维度:用户可以利用Sentinel提供的API来自定义一些API分组,这种属于细粒度的限流,针对某一类的uri进行匹配限流,可以跨多个微服务。

2.1 路由维度

在这里插入图片描述

在这里插入图片描述

这里的Burst size是指:应对突发请求时额外允许的请求数目。

还可以设置针对断言的请求属性:

在这里插入图片描述

2.2 API分组维度

添加API分组:

在这里插入图片描述

在这里插入图片描述

对当前分组限流:

在这里插入图片描述

测试:

属于API分组的路由被限流

在这里插入图片描述

不在分组内的不受影响

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gateway 的相关文章

  • JetBrains Gateway IDEA远程开发

    为什么进行远程开发 xff1f 无论身处何处数秒内连接至远程环境 充分利用远程计算机的强大功能 在任何笔记本电脑上都可以轻松工作 xff0c 无论其性能如何 借助远程计算机的计算资源 xff0c 充分利用最大规模的数据集和代码库 在远程服务
  • Spring Cloud Gateway(黑马springcloud笔记)

    Gateway 目录 Gateway一 为什么需要网关二 gateway入门三 断言工厂四 过滤器工厂五 全局过滤1 实现2 过滤器执行顺序 六 跨域问题 一 为什么需要网关 不能让外部能够直接访问微服务 xff0c 而是需要通过网关访问
  • SpringCloud:Gateway之StripPrefix使用

    StripPrefix 过滤配置 很多时候也会有这么一种请求 用户请求路径是 api goods 而真实路径是 goods 这时候我们需要去掉 api才是真实路径 此时可以使用StripPrefix功能来实现路径的过滤操作 如下配置 ser
  • SpringCloud Gateway API接口加解密

    接口范围 所有GET请求 白名单除外 body 体 是 application json 和 application json utf8 的 POST请求 白名单除外 POST url传参也支持 白名单除外 启用禁用 版本 后端提供独立接口
  • idea maven刷新后jdk版本变化

    最近在做项目时 遇到这样的问题 每次刷新maven后 项目的jdk版本就会变化 可以通过图2和图3的方式临时更改jdk版本 但是下次刷新maven后仍然还是变化 没解决根本问题 可以更改maven配置文件 解决办法 更改maven conf
  • UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

    目前国内应急救援市场都是基于被动定位应用 在特殊情况下救援也大多处于单兵作战的情况 并不能及时知道自己和自己组员的位置信息和状态 且没有场景感知和室内外一体位置信息结合 使相关救援人员处于更加危险境地 本篇就带大家详细了解一下微能信息针对消
  • spring cloud系列学习(六、SpringCloud之 gateway网关)

    Spring Cloud Gateway 是基于 Spring Framework 5 0 和 Spring Boot 2 0 构建的 API 网关 提供路由等功能 其旨在提供一种简单而有效的方法路由到 API 并为它们提供跨领域的关注点
  • gateway网关

    这里先简单介绍下getway网关的大体实现 细节不去详述 这一篇也是最后一篇关于微服务的基础介绍 后面的文章中会介绍具体微服务和中间件的设计 编码和实现 项目中加入热部署 由于我们在开发阶段频繁的修改代码 所以在项目中加入热部署以免频繁的启
  • Gateway网关-网关的cors跨域配置

    什么是跨域问题 跨域 域名不一致就是跨域 主要包括 域名不同 www taobao com 和 www taobao org 和 www jd com 和 miaosha jd com 域名相同 端口不同 localhost 8080和lo
  • 第17章 站点构建

    mini商城第17章 站点构建 一 课题 站点构建 二 回顾 1 Gateway限流 2 Nginx限流 3 Redis集群应用 4 缓存灾难处理 三 目标 1 Sentinel Sentinel介绍 Sentinel核心功能 Sentin
  • 微服务内部服务调用@Inner

    1 外部从Gateway访问 需要鉴权 eg CURD操作 这种是最常使 的 户登录后正常访问接 不需要我们做什么处理 可能有的接 需要加权限字段 2 外部从Gateway访问 不需要鉴权 eg 短信验证码 需要我们将uri加 到secur
  • 微服务多模块:Springboot+Security+Redis+Gateway+OpenFeign+Nacos+JWT (附源码)仅需一招,520彻底拿捏你

    可能有些人会觉得这篇似曾相识 没错 这篇是由原文章进行二次开发的 前阵子有些事情 但最近看到评论区说原文章最后实现的是单模块的验证 由于过去太久也懒得验证 所以重新写了一个完整的可以跑得动的一个 OK 回到正题 以下是真正对应的微服务多模块
  • Gateway网关简介以及使用

    目录 一 概述简介 1 1 Gateway是什么 1 2 Gateway能干嘛 1 3 Zuul和gateway 1 4 gateway三大核心概念 1 5 gateway工作流程 二 实战练习 2 1 入门demo 2 2 网关路由两种配
  • 微服务·架构组件之网关- Spring Cloud Gateway

    微服务 架构组件之网关 Spring Cloud Gateway 引言 微服务架构已成为构建现代化应用程序的关键范式之一 它将应用程序拆分成多个小型 可独立部署的服务 Spring Cloud Gateway是Spring Cloud生态系
  • Sentinel + Gateway网关动态限流

    Sentinel 控制台 0 概述 Sentinel 控制台是流量控制 熔断降级规则统一配置和管理的入口 它为用户提供了机器自发现 簇点链路自发现 监控 规则配置等功能 在 Sentinel 控制台上 我们可以配置规则并实时查看流量控制效果
  • 理解gateway网关,及与前端联调过程

    1 一些概念 客户端向Spring Cloud Gateway发出请求 然后在Gateway Handler Mapping中找到请求相匹配的路由 将其发送到Gateway Web Handler Handler再通过制定的过滤器链来将请求
  • 在无头模式下使用 Firefox 68.9.0esr 以及 GeckoDriver Selenium 和 Python 时出现 504 网关超时错误

    我用硒制作了一个容器图像 我用了一个ubi image来自 RedHat 作为基础镜像 我安装了以下版本的 geckodriver 和 Mozilla Firefox 壁虎驱动程序 0 26 0 e9783a644016 2019 10 1
  • Gateway网关-路由的过滤器配置

    目录 一 路由过滤器 GatewayFilter 1 1 过滤器工厂GatewayFilterFactory 1 2 案例给所有进入userservice的请求添加一个请求头 Truth itcastis freaking awesome
  • 增加504超时错误

    有什么方法可以使错误 504 网关超时更长 如果可以的话 如何以及更改它的文件位于何处 我在centos 6上使用nginx 根据您拥有的网关类型 您应该使用类似以下内容的内容 proxy read timeout 600s 检查文档 ht
  • 从 IP 块计算网络掩码/网关

    我们的数据中心为我们提供了所有机器的 JSON 转储 以便导入到我们自己的库存管理系统中 这提供了 IP 块 例如 192 168 1 1 26 但当我导入数百个块时 我还想计算网络掩码和网关 我查看了 PHP Doxygen 上的网络功能

随机推荐

  • 麒麟系统开机自启的实现方式

    方法 xff1a 利用Linux的 desktop文件实现开机启动 xff0c desktop文件位于在 etc xdg autostart目录下 举例 在 etc xdg autostart 目录下建立一个 test desktop文件
  • ifconfig与 ip addr命令详细

    文章目录 前言一 如何查看机器的IP地址二 网卡信息详解1 网卡名称2 网络设备状态标识3 IP地址4 MAC地址 三 ifconfig与 ip addr区别 前言 本文记录在linux系统下如何查看ip信息 网卡状态等信息以及简要说明if
  • Linux网卡ifcfg网卡配置项详解

    前言 由于在工作中涉及到服务器网卡的适配 xff0c 算是linux新手 xff0c 本次记录下linux网卡ifcfg exx配置项含义说明 xff0c 以下是某款终端下centos 7 5系统自动生成的网卡配置内容 xff1a span
  • Determining IP information for eth问题解决

    前言 在Linux网卡ifcfg网卡配置项详解文章中提到一个BOOTPROTO 61 配置项 它的意思是指网卡启动时获取ip的方式 xff0c 可以是dhcp或者静态ip 方式 xff0c 如果设置为none说明是不指定ip设置方式 一 问
  • 关于vector大小(size)和容量(capacity)总结

    操作大小的函数 在Vector容器中有以下几个关于大小的函数 方法效果size 返回容器的大小empty 判断容器是否为空max size 返回容器最大的可以存储的元素capacity 返回容器当前能够容纳的元素数量 例子一 xff1a 该
  • inet_addr 和inet_ntoa函数作用

    我们使用socket进行通信的时候 xff0c 我们需要指定三个元素 xff1a 通信域 xff08 地址族 xff09 IP地址 端口号 xff0c 这三个元素由SOCKADDR IN结构体定义 xff0c 为了简化编程一般将IP地址设置
  • visual studio中头文件和库文件路径设置

    在程序开发中 xff0c 很多时候需要用到别人开发的工具包 xff0c 如OpenCV和itk 一般而言 xff0c 在vs中 xff0c 很少使用源文件 xff0c 大部分是使用对类进行声明的头文件和封装了类的链接库 xff08 静态li
  • LNK2001: 无法解析的外部符号的几种情况

    一般来说 xff0c 我们引用第三方库时 xff0c 需要进行指定依赖项配置 xff0c 若没有进行相关配置 xff0c 则编译器会出现 LNK2001 无法解析的外部符号 错误 这个是最常见的问题 xff0c 具体步骤 xff1a 项目
  • JMeter

    Apache JMeter 压力测试工具 一 什么是Apache JMeter Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具 xff0c 用于对软件做压力测试 JMeter 最初被设计用于 Web 应
  • C++11向线程函数传递参数

    template span class token operator lt span class Function span class token punctuation span class span class token punct
  • C++11之std::future对象使用说明

    std future介绍 在前面几篇文章中基本都用到thread对象 xff0c 它是C 43 43 11中提供异步创建多线程的工具 但是我们想要从线程中返回异步任务结果 xff0c 一般需要依靠全局变量 xff1b 从安全角度看 xff0
  • delete 和 delete[]真正区别

    我们通常从教科书上看到这样的说明 xff1a delete 释放new分配的单个对象指针指向的内存 delete 释放new分配的对象数组指针指向的内存 那么 xff0c 按照教科书的理解 xff0c 我们看下下面的代码 xff1a spa
  • Activity的onNewIntent

    一个应用的Activity可供多种方式调用启动 xff0c 当多个调用希望只有一个Activity的实例存在 xff0c 并且还要区分是被谁启动或是已经启动被谁拉到前台来的 xff0c 这就需要Activity的onNewIntent In
  • at 与 crontab调度命令详解

    目录 1 At调度 只执行一次 1 1准备任务 xff1a 查看at服务是否开启 1 2绝对时间定制任务 1 3相对时间定制任务 1 4查看at进程 1 5删除at任务 2 crontab调度 可重复执行 2 1简述 2 2crontab调
  • [计算机网络] --- STP (下篇) 工作原理及配置

    文章目录 前言一 stp工作原理二 stp计算过程 工作步骤1 选举根桥2 选举根端口3 选举指定端口4 确立阻塞端口 三 例题 xff1a 前言 上一篇文章我们介绍了stp的起源和一些相关术语 xff0c 接下来我们就正式开始介绍stp的
  • iOS富文本实现(一):私密阅读效果

    废话不多说 xff0c 咱们直接先看效果 xff01 看是不是咱想要的哈 目录 xff1a 一 前言 xff1a 二 核心需求说明 三 实现效果核心代码片段 四 几个注意的小细节 一 前言 xff1a 我的第一篇CSDN文章就这样发布了 x
  • 登录 注册 servlet基础

    工具类 页面与数据库的交换 span class token keyword package span org span class token punctuation span lizhenhua span class token pun
  • 解决Ubuntu开机之后不显示桌面图标,只显示桌面文件的问题

    Ubuntu开机之后不显示桌面图标 xff08 指左侧那一栏 xff09 xff0c 但桌面上的文件可以使用 xff0c 鼠标可以使用 鼠标右键 gt 打开终端 xff1b xff08 如果鼠标不能使用 xff0c 按ctl 43 alt
  • yii2中登录后跳转回登录前请求的页面

    yii2中登录后跳转回登录前请求的页面 作者 php 发布时间 2017 06 16 浏览 1030次 转发请备注原文地址 xff1a www niwoxuexi com blog php article 158 html yii2中登录后
  • Gateway

    Gateway SpringCloud微服务网关组件 一 Spring Cloud Gateway简介 1 为什么要用Gateway xff1f 在微服务架构中 xff0c 通常一个系统会被拆分为多个微服务 xff0c 微服务之间的调用可以