利用Spring Cloud Gateway Predicate优化微服务路由策略
利用Spring Cloud Gateway Predicate优化微服务路由策略
一、Predicate简介
Spring Cloud Gateway 是 Spring 生态系统中用于构建 API 网关的框架,它基于 Project Reactor 和 Netty 构建,旨在提供一种高效且灵活的方式来处理 HTTP 请求和响应。
Spring Cloud Gateway 的路由配置中,predicates
(断言)用于定义哪些请求应该匹配特定的路由规则。
断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
根据源码可以看到Spring cloud gateway 的内置断言,可以看到核心10个内置Predicate
在 Spring Cloud Gateway 的配置中,Predicate
通常通过 predicates
字段定义,配合路由配置一起使用。它可以基于以下方面来进行请求匹配:
- 路径匹配(Path)
- 请求方法匹配(Method)
- 请求头匹配(Header)
- 请求参数匹配(Query Param)
- IP 地址匹配(IP)
- 主机名匹配(Host)
- 负载均衡支持(lb://)
Spring Cloud Gateway除了提供一系列内置的断言工厂,同时也支持自定义断言。
二、常见 Predicate 类型
2.1 Path Predicate
Path Predicate 用于根据请求的路径进行匹配。
predicates:- Path=/api/** # 匹配以 /api/ 开头的请求路径
-
示例:
Path=/api/**
匹配请求路径以/api/
开头的所有请求,包括/api/v1/users
、/api/v2/orders
等。 -
通配符:
**
表示匹配任意路径段。*
表示匹配单个路径段。
示例:
spring:application:name: spring-cloud-gateway-samplecloud:gateway:routes:- id: bloguri: http://blog.abc.compredicates:# 匹配路径转发- Path=/api-boot-datasource-switch.html
# 端口号
server:port: 9090
在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html
时就会被自动转发到http://blog.abc.com/api-boot-datasource-switch.html
,这里要注意完全匹配Path
的值时才会进行路由转发
2.2 Method Predicate
Method Predicate 用于根据请求的方法类型(GET、POST、PUT 等)进行匹配。
predicates:- Method=GET # 仅匹配 GET 请求
- 示例:
Method=POST
只会匹配 HTTP POST 方法的请求。
2.3 Header Predicate
Header Predicate 用于根据请求中的某些头信息进行匹配。
predicates:- Header=Content-Type=application/json # 匹配 Content-Type 头为 application/json 的请求
- 示例:
Header=X-Custom-Header=foo
匹配请求头中X-Custom-Header
值为foo
的请求。
2.4 Query Param Predicate
Query Param Predicate 用于根据请求 URL 中的查询参数进行匹配。
predicates:- Query=type=admin # 匹配 URL 中包含 ?type=admin 的请求
- 示例:
Query=user=admin
匹配 URL 中查询参数user=admin
的请求,如https://example.com?user=admin
。
2.5 Host Predicate
Host Predicate 用于根据请求的 Host
头进行匹配。
predicates:- Host=example.com # 匹配 Host 头为 example.com 的请求
- 示例:
Host=*.example.com
匹配example.com
域名下的所有子域名,如api.example.com
、blog.example.com
等。
2.6 IP Predicate
IP Predicate 用于根据请求源 IP 地址进行匹配。
predicates:- Ip=192.168.1.0/24 # 匹配来自 192.168.1.0/24 网段的请求
- 示例:
Ip=10.0.0.0/8
匹配来自10.0.0.0/8
网段的请求。
2.7 Accept Predicate
Accept Predicate 用于根据请求的 Accept
头部进行匹配。
predicates:- Accept=application/json # 匹配 Accept 头为 application/json 的请求
- 示例:
Accept=text/html
匹配Accept
头为text/html
的请求。
2.8 Composite Predicate
你可以将多个 Predicate 组合成一个复合条件,使用 and
、or
等逻辑操作符。
predicates:- Path=/api/** and Method=POST # 请求路径以 /api/ 开头,且请求方法为 POST- Path=/api/** or Query=user=admin # 请求路径以 /api/ 开头,或查询参数 user=admin
2.9 Cookie
-
用途:匹配请求中的 Cookie。
-
示例:
predicates:- Cookie=chocolate, choco\.value
匹配名为
chocolate
且值符合正则表达式choco\.value
的 Cookie。
2.10 After 和 Before
-
用途:基于时间戳匹配请求。
-
示例:
predicates:- After=2024-01-01T00:00:00+08:00[Asia/Shanghai]
匹配在指定日期之后发出的请求。
predicates:- Before=2024-01-01T00:00:00+08:00[Asia/Shanghai]
匹配在指定日期之前发出的请求。
2.11 Between
-
用途:结合
After
和Before
,匹配某一时间段内的请求。 -
示例:
predicates:- Between=2024-01-01T00:00:00+08:00[Asia/Shanghai],2024-01-31T23:59:59+08:00[Asia/Shanghai]
2.12 RemoteAddr
-
用途:匹配客户端 IP 地址或 CIDR 块。
-
示例:
predicates:- RemoteAddr=192.168.1.1/24
匹配来自特定网段的请求。
三、Predicate 的组合
Spring Cloud Gateway 允许你通过逻辑运算符(and
、or
)组合多个 Predicate,定义更复杂的路由匹配规则。你可以组合不同的 Predicate 来匹配路径、方法、头部、参数等。
示例 1:匹配路径为 /api/**
且请求方法为 POST 的请求:
predicates:- Path=/api/** and Method=POST
示例 2:匹配路径为 /api/**
或者查询参数 user=admin
的请求:
predicates:- Path=/api/** or Query=user=admin
示例 3:使用多个 and
来组合复杂的匹配条件:
predicates:- Path=/api/** and Method=GET and Header=Authorization=Bearer
这表示只有当请求路径为 /api/**
且请求方法为 GET
,且请求头中包含 Authorization: Bearer
时,才会匹配此路由。
常用组合示例
1) 匹配 GET 请求并带有 Authorization
头
predicates:- Method=GET and Header=Authorization=Bearer
2) 匹配特定域名和查询参数
predicates:- Host=api.example.com and Query=type=admin
3) 匹配路径和方法的组合
predicates:- Path=/products/** and Method=GET
4) 路径匹配和 IP 匹配
predicates:- Path=/api/** and Ip=192.168.1.0/24
四、自定义断言
除了使用内置的断言工厂外,还可以通过实现自己的 GatewayFilterFactory
来创建自定义断言。这使得你可以根据业务逻辑添加更加复杂的匹配条件。
示例:自定义断言
假设我们想要创建一个名为 Custom
的自定义断言,它可以根据请求体中的 JSON 字段进行匹配。
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import reactor.core.publisher.Mono;public class CustomPredicateFactory extends AbstractRoutePredicateFactory<CustomPredicateFactory.Config> {public CustomPredicateFactory() {super(Config.class);}@Overridepublic Mono<Boolean> applyAsync(Config config, ServerHttpRequest request) {// 实现具体的匹配逻辑return Mono.just(request.getHeaders().containsKey("Custom-Header"));}public static class Config {private String key;// Getters and setters}
}
然后在配置文件中引用这个自定义断言:
predicates:- name: Customargs:key: value
总结
-
Predicate
是 Spring Cloud Gateway 中定义路由匹配条件的核心组件,通过多个Predicate
条件,你可以灵活地匹配请求。 - 支持多种常见的匹配方式,包括路径、方法、头部、查询参数、IP、主机等。
- 可以组合多个
Predicate
以构建复杂的路由规则。 - 支持逻辑组合(如
and
、or
)来满足不同的路由需求。
通过灵活使用 Predicate
,你可以对不同的请求进行精准路由控制,从而实现高效的请求管理和流量分发。
相关文章:
利用Spring Cloud Gateway Predicate优化微服务路由策略
利用Spring Cloud Gateway Predicate优化微服务路由策略 一、Predicate简介 Spring Cloud Gateway 是 Spring 生态系统中用于构建 API 网关的框架,它基于 Project Reactor 和 Netty 构建,旨在提供一种高效且灵活的方式来处理 HTTP 请求和响应。 Spring …...
谷歌浏览器的网络安全检测工具介绍
作为全球最受欢迎的浏览器之一,谷歌浏览器不仅提供了快速、便捷的浏览体验,还内置了一系列强大的网络安全检测工具,帮助用户识别潜在的网络威胁,保护个人隐私和数据安全。本文将详细介绍谷歌浏览器中的几项关键网络安全检测功能&a…...
Debian系统宝塔面板安装LiteSpeed Memcached(LSMCD)
参考链接 1. 官网指引: https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation 2. 安装OpenLiteSpeed官方LSMCD对象缓存替换Memcached详细图文教程 - 搬主题 实操记录: 首先LSMCD 默认的端口是11211,…...
termux下ubuntu换arm清华源
原官方源 deb http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiversedeb http://ports.ubuntu.com/ubuntu-ports jammy-updates main restricted universe multiversedeb http://ports.ubuntu.com/ubuntu-ports jammy-security main restricted un…...
计算机网络——练习题
一. 单选题(共27题,67.5分) 1. (单选题)计算机网络的最突出的优点是____。 A. 运算速度快 B. 运算精度高 C. 存储容量大 D. 资源共享 我的答案: D:资源共享;正确答案: D:资源共享; 2.5分 答案解析: 2. (单选题)TCP/IP协…...
单机游戏《野狗子》游戏运行时提示dbghelp.dll缺失是什么原因?dbghelp.dll缺失要怎么解决?
《野狗子》游戏运行时提示dbghelp.dll缺失:原因与解决方案 在畅游《野狗子》这款引人入胜的游戏世界时,突然遭遇“dbghelp.dll缺失”的错误提示,无疑会给玩家的探险之旅蒙上一层阴影。作为一名深耕软件开发领域的从业者,我深知此…...
飞搭系列 | 条件动态控制,打造个性化数字体验
前言 汉得飞搭aPaaS低代码平台(FEIDA,以下简称“飞搭”)是基于低代码理念打造的融合 aPaaS 平台,助力企业快速搭建业务应用。作为 HZERO 生态的重要组成部分,致力于充分融合 HZERO 的各平台能力,提供企业用…...
ssr实现方案
目录 序言 一、流程 二、前端要做的事情 三、节点介绍 四、总结 序言 本文不是详细的实现过程,是让你最快最直接的理解ssr的真正实现方法,有前端经验的同学,能够很好的理解过程,细节根据具体项目实现 一、前端要做的事情 1.…...
STM32高级物联网通信之以太网通讯
目录 以太网通讯基础知识 什么是以太网 互联网和以太网的区别 1)概念与范围 (1)互联网 (2)以太网 2)技术特点 (1)互联网 (2)以太网 3)应用场景 (1)互联网 (2)以太网 以太网的层次 1)物理层 2)数据链路层 OSI 7层模型 TCPIP 4层模型 一些常见…...
以太网帧、IP数据报图解
注:本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式(包含相关例题讲解) jueyuanfengsheng2023-08-07 11:49 一、基础知识 UDP 段、IP 数据包,以太网帧图示 通信过程中ÿ…...
外包干了两年,技术退步明显...
先说一下自己的情况,普通本科,曾在外包干了2年多的功能测试,再加上大环境不好,那时我整个人心惊胆战的,怕自己卷铺盖走人了,所以当时我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境…...
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
前言 在当今科技迅猛发展的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会,CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英,共同探讨AI技术的最新进展、挑…...
vue中proxy代理配置(测试一)
接口地址:http://jsonplaceholder.typicode.com/posts 1、配置一(代理没起作用) (1)设置baseURL为http://jsonplaceholder.typicode.com (2)proxy为 ‘/api’:’ ’ (3&a…...
通用人工智能的关键:统一语言描述万物
当今世界,人工智能(AI)正以前所未有的速度推进着人类社会的进步。从最初的简单计算到如今能够执行复杂任务的智能系统,AI 的每一次飞跃都伴随着理解世界能力的显著提升。然而,要实现真正的通用人工智能——即能够像人类…...
使用QML实现播放器进度条效果
使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下: Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…...
TowardsDataScience 博客中文翻译 2018~2024(一百二十三)
TowardsDataScience 博客中文翻译 2018~2024(一百二十三) 引言 从 2018 年到 2024 年,数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台,记录了从基础工具到前沿技术的多方面发展。…...
14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“
出现这个错误是因为使用的 CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束,部分仓库已被移至归档库。这导致了你的 yum 命令无法找到所需的元数据文件。CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止…...
将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)
将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中,可以使用第三方日志库(如 Serilog)来实现。Serilog 是一个流行的日志库,支持将日志输出到文件、控制台、数据库等多种目标。 以下是实现步骤: 1. 安装 Serilog 相…...
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道 在现代后端开发中,表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证,同时提供人性化的错误提示,是每位开发者的必修课。在本文中…...
相机主要调试参数
解析度测试 - 解释如何衡量摄像头捕捉细节的能力,确保图像清晰。锐度评估 - 教你如何判断图像边缘的清晰程度,以优化视觉效果。色散与色彩还原 - 分析色彩准确性,确保所见即所得的色彩一致性。白平衡校正 - 确保在各种光源下拍摄的照片颜色自…...
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码:引领智慧养老新时代 在当今老龄化社会日益严重的背景下,智慧养老已成为解决养老问题的重要途径。我们推出的JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码,正是基于这一需求而研发…...
一个简单封装的的nodejs缓存对象
我们在日常编码中,经常会用到缓存,而一个有效的缓存管理,也是大家必不可少的工具。而nodejs没有内置专用的缓存对象,并且由于js的作用域链的原因,很多变量使用起来容易出错,如果用一个通用的缓存管理起来&a…...
【ELK】filebeat采集数据输出到kafka指定topic
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 背景filebeat主体配置filebeat.inputs部分filebeat.output部分 filebeat完整配置 背景 今天收到需求,生产环境中通需要优化filebeat的输出,…...
Qt 6 QML Settings location 不创建指定路径文件
在 Qt QML 项目中可以使用Qt QSettings QML 版 Settings 方便数据持久化,具体使用可以参考Qt 文档,这里主要简单记录一下从Qt 5 升级到 Qt 6 后,没有创建指定的文件。在Qt 5中是使用 fileName 属性来指定文件路径,如下࿰…...
LabVIEW如何学习FPGA开发
FPGA(现场可编程门阵列)开发因其高性能、低延迟的特点,在实时控制和高速数据处理领域具有重要地位。LabVIEW FPGA模块为开发者提供了一个图形化编程平台,降低了FPGA开发的门槛。本篇文章将详细介绍LabVIEW FPGA开发的学习路径&…...
idea设置控制台日志输出自动换行
文章目录 1. 原因2. 方法一:3. 方法二: 1. 原因 你是否碰到ideal控制台输入日志是一行的效果,那是因为带了soft wrap。 2. 方法一: 最新版的IDEA设置控制台自动换行位置如下: Setting->Editor->General->C…...
帧缓存的分配
帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle&…...
Spitfire浏览器:为CodiggerDesktop打造的轻量级浏览新选择
近期,一款名为Spitfire的专业级轻量级浏览器凭借其卓越的性能和便捷的使用体验,吸引了科技界的广泛关注。这款浏览器是专为CodiggerDesktop用户量身打造的,旨在提供高速、流畅的浏览服务,满足开发者和设计者的多元化需求。 Spitfi…...
etcd+京东hotkey探测使用
qhotKey链接 京东hotkey把热点数据默认缓存在了本地缓存caffeine中,也可以存到redis中,但是京东hotkey的SDK没有redis的实现方法,因此需要自己实现。 官方目录结构下:分别是client客户端(要打包引入到自己的项目&…...
从源码分析swift GCD_DispatchGroup
前言: 最近在写需求的时候用到了DispatchGroup,一直没有深入去学习,既然遇到了那么就总结下吧。。。。 基本介绍: 任务组(DispatchGroup) DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…...
【最后203篇系列】002 - 两个小坑(容器时间错误和kafka模块报错
这里两个小坑填了,希望有用。 1 Multiple conflicting time zone configurations found:\n/etc/timezone: Asia/Shanghai\n/etc/localtime is a symlink to: Etc/UTC\nFix the configuration, or set the time zone in a TZ environment variable. 我碰到这个错误…...
StarRocks 生产部署一套集群,存储空间如何规划?
背景:StarRocks 3.2,存储一体 使用场景:多分析、小查询多单但不高、数据量几百T FE 存储 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的 HDD 存储,…...
WebGL 项目外包开发流程
WebGL 项目外包开发流程与一般的软件项目外包流程类似,但由于 WebGL 的特殊性,在某些环节需要特别注意。以下是一个详细的 WebGL 项目外包开发流程。 1. 需求分析与定义 (明确目标是关键): 客户沟通与需求收集: 与客户进行深入沟…...
SQLMAP
Taeget 实践内容:练习使用 SQLMap 进行自动化 SQL 注入。 涉及知识点:理解 SQL 注入、SQLMap 工具使用、自动化攻击、Web 应用安全。 Trial 说明:Sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞,并…...
windwos defender实现白名单效果(除了指定应用或端口其它一律禁止)禁止服务器上网
一、应用场景说明 当我们的一台windows服务器中毒,变成别人肉鸡,不断向外请示非法网站或攻击其它服务器。 要彻底清除相关木马或病毒往往需要的时间比较长,比较有效的方法是禁止服务器主动向外发包除了网站端口和远程程序除外。 其实这就是一…...
模型库网站
目录 1 网站 1 网站 https://hf-mirror.com/ https://swanhub.co/models https://modelscope.cn/models https://www.suanjiayun.com/mirror?sourcebaidutg&bd_vid11787806978655223592...
5、栈应用-表达式求值
本章内容使用上述栈结构函数,来完成表达式求值操作。 表达式例如:3*(7-2) 或者 (0-12)*((5-3)*32)/(22) 。 1、实现思路 a、建立OPTR(运算符)和OPND(数字)两个栈,后输入字符串以结束 b、自左向…...
传统CV算法——基于opencv的答题卡识别判卷系统
基于OpenCV的答题卡识别系统,其主要功能是自动读取并评分答题卡上的选择题答案。系统通过图像处理和计算机视觉技术,自动化地完成了从读取图像到输出成绩的整个流程。下面是该系统的主要步骤和实现细节的概述: 1. 导入必要的库 系统首先导入…...
重温设计模式--原型模式
文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式,它的主要…...
STM32在bootloader跳转到application时设置MSP
1. 简介 在做bootloader 跳转到application时,经常会看到设置MSP的操作__set_MSP(*(__IO uint32_t*) APPLICATION_ENTRY);。 1.1 MSP的作用 在STM32微控制器中,MSP(Main Stack Pointer,主堆栈指针)是一个非常重要的…...
SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
一、黑翅鸢算法BKA 黑翅鸢算法(Black-winged kite algorithm,BKA)由Wang Jun等人于2024年提出,该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略,增强了算法的全局搜索能力,提…...
我们来学mysql -- 区分大写
区分大写 题记大小写不敏感文件文件系统大小写敏感文件文件系统mysql认不认大小写lower_case_table_names 题记 混沌初开,万物共享盛世,自由自在好不快活然,人性难掩,初露獠牙,喊杀一片,好不热闹族群&…...
显示器“刷新率”的通俗理解
显示器刷新率的定义 显示器的刷新率(Refresh Rate)是指屏幕每秒刷新图像的次数,以赫兹(Hz)为单位。比如,刷新率为 60Hz 表示屏幕每秒能够刷新 60 次图像。 刷新率是显示器硬件特性的一部分,定…...
25计软新增考研院校!或可捡漏上岸!
C哥专业提供——计软考研院校选择分析专业课备考指南规划 新增的计算机与软件工程考研院校为考研同学带来了多方面的机遇,这些机遇不仅体现在过国家线后可能面临的更低竞争压力,还包括更多元化的教育选择和更广阔的就业前景: 一、降低竞争压…...
[入门JAVA数据结构 JAVADS] 哈希表的初步介绍和代码实现
目录 前言 哈希表的概念和诞生的原因 哈希冲突 简单实现哈希表 基本属性 插入 获取key的val 计算负载因子 扩容(难点) 完整代码(方便大家复制自己去调试) 数据是int的 使用泛型实现的 结尾 前言 笔者鸽了接近两个月后决定"勤政"了.尽力把学过的知识写下…...
谷歌外链好不好,关键看“搭配”!
做SEO的人都知道外链很重要,但有一个误区是只追求“高质量外链”,却忽略了外链结构的合理性。其实,外链就像饮食,光吃好东西不够,营养搭配得当才能健康发展。 谷歌对外链的要求,不仅是看它是不是dofollow、…...
【AI驱动的数据结构:包装类的艺术与科学】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object,为了…...
ElasticSearch 的核心功能
要深入理解 ElasticSearch 的核心功能,需要全面掌握其 全文搜索、分析、聚合 和 索引生命周期管理(ILM) 的设计原理和实际应用。 1. 全文搜索 ElasticSearch 的全文搜索是其核心功能之一,依赖于倒排索引和强大的分词、相关性评分…...
任务2 配置防火墙firewalld
基本概念 概述 支持动态更新防火墙规则 不重启即可创建、修改和删除规则 使用区域和服务来简化防火墙配置 区域 一组预定义的规则,防火墙策略集合(或策略模板) 把网络分配到不同的区域中,并为网络及其关联的网络接口或流量源…...
PHP入门到高级 -- 学习基础语法和概念
学习PHP的基础语法和概念是成为一名高级PHP开发者的关键。以下是一个逐步学习PHP并逐渐深入了解其高级特性的指南。 学习基础语法: 变量和数据类型:了解如何声明和使用变量,以及PHP支持的不同数据类型。运算符:掌握算术…...