ALB网关路由最佳实践

SAE应用默认无法访问公网,公网也无法访问私网,为了解决这一问题,您可以为应用配置ALB网关路由,以实现公网能够正常访问SAE应用。 本文主要配置ALB网关路由的重要参数配置说明。

转发规则概述

您可以在SAE侧为ALB实例的一个监听添加多条转发规则。对于一条转发规则,从转发数据链路方向分为请求方向转发规则和响应方向转发规则,在SAE侧只能为ALB实例仅支持请求方向转发规则,如果您需要配置响应方向转发规则,需要在SLB侧配置。

一条转发规则由两部分组成:转发条件(condition)和转发动作(action)。转发条件实现对数据包的匹配,转发动作按照匹配结果执行对应的数据转发形式。您可以在一条转发规则中定义一个或多个转发条件以及一个或多个转发动作。

image
  • 对于标准版和WAF增强版的ALB实例,客户端发起请求至ALBALB将请求数据通过请求方向转发规则处理后发送至对应的后端服务器,后端服务器的响应数据再经过ALB响应方向转发规则处理后,返回给客户端。

    • 请求方向转发规则中只能设置请求方向条件和动作。

    • 响应方向转发规则中可以设置响应方向的条件和动作,同时也可以设置请求方向的条件。

  • 一个转发规则必须包含一条转发至、重定向至或返回固定响应类型的转发动作,以保证客户端的请求不会中断转发动作。

功能入口

  1. 登录SAE控制台,在左侧导航栏单击命名空间,然后选择目标地域。

  2. 命名空间页面,单击目标命名空间名称。

  3. 在目标命名空间的基础信息页面,在左侧导航栏单击网关路由,然后单击创建网关路由

    本文只介绍关键功能的配置。具体创建网关路由的介绍,请参见为应用设置路由规则(ALB)

转发条件配置介绍

SAE侧,支持配置的转发条件为域名访问端口Path

域名配置介绍

域名配置规则

说明

精准匹配及通配符

  • 匹配说明

    • 精准匹配:请求的域名和设定的域名需完全一致。

    • 通配符匹配:请求的域名和设定的域名除通配符外需完全一致。

  • 输入条件

    域名长度限制为3~128个字符,只允许包含大小写英文字母、数字和.-?=~_+\^*!$&|()[]这些特殊字符,支持星号(*)和半角问号(?)作为通配符使用。

  • 示例

    请求的域名:www.example.com

    • 精准匹配:输入www.example.com匹配成功。

    • 通配符匹配:输入*.example.comwww.example.*匹配成功。

正则匹配

  • 匹配说明

    请求的域名和设定的域名根据正则表达式匹配。

  • 输入条件

    域名长度限制为3~128个字符,只允许包含大小写英文字母、数字和.-?=~_-+\^*!$&|()[]这些特殊字符。

  • 示例

    请求的域名:www.example.com

    不区分大小写:正则输入^www.example.com$匹配成功。

Path配置介绍

路径配置规则

说明

精准匹配及通配符

  • 匹配说明

    • 精准匹配:请求的路径和设定的路径需完全一致。

    • 通配符匹配:请求的路径和设定的路径除通配符外需完全一致。

  • 输入条件

    必须以 开头,只允许包含大小写英文字母、数字和$-_.+/&~@:这些特殊字符,支持星号(*)和半角问号(?)作为通配符使用。

  • 示例

    请求的路径:/example/text

    • 精准匹配:输入/example/text匹配成功。

    • 通配符:输入/example/*匹配成功。

    说明

    ALB的路径匹配规则与Nginx不同,ALB不支持路径最长匹配原则。

    例如,Nginx的常用配置为location /abc,匹配location的方式为最长前缀匹配,ALB的最长前缀匹配需通过通配符实现。您可以在ALB上配置/abc/*(精确匹配及通配符)来达到相同的效果。

正则匹配

  • 匹配说明

    请求的路径和设定的路径根据正则表达式匹配。

  • 输入条件

    只允许包含大小写英文字母、数字和.-_/=?~^*$:()[]+|这些特殊字符 。

  • 示例

    请求的路径:/sys/aaa/HOST

    • 区分大小写:正则匹配输入^/sys/(.*)/HOST$时,路径匹配成功。

    • 不区分大小写:正则匹配输入^/sys/(.*)/host$时,路径匹配成功。

转发动作配置介绍

在配置转发动作中,支持配置重写策略和重定向规则。

重写策略配置介绍

说明

在转发动作中可配置重写策略。

  • 选择转发至时,支持配置重写策略。

  • 转发条件中的域名配置,请参见域名配置介绍

    如果重定向的域名为默认的${host},则表示动态替换为原始请求的域名。

路径配置介绍

转发条件的路径配置正则表达式后,转发动作中的路径支持正则表达式替换。关于如何添加转发规则,请参见为应用设置路由规则(ALB)

  • 注意事项

    • 转发条件中正则表达式中包含的半角圆括号()需要与转发动作中重写路径中$变量的个数保持一致。

    • 转发动作中重写的路径中需要包含${1}${2}${3}中的一个或多个,且这三个变量不支持使用其他字符代替。

  • 替换原理

    1. 路径匹配:客户端发送请求,并匹配到某一条路径转发规则的正则表达式。

    2. 提取与替换:按照正则表达式的规范提取,将前三个半角圆括号()提取出来的内容分别保存至${1}${2}${3}中,用于在转发动作的重写路径中替换。

    3. 拼接:按照转发动作中重写路径的配置,对其中的${1}${2}${3}进行值的替换,最终拼接成重写的实际路径。

    编号

    步骤

    示例

    1

    配置转发规则中的转发条件和转发动作。

    • 转发条件路径:/sys/(.*)/(.*)/aaa

    • 转发动作重写路径:/${1}/${2}

    2

    客户端发送请求,并匹配路径。

    • 客户端发送的请求路径:/sys/ccc/bbb/aaa

    • 匹配到的转发条件路径:/sys/(.*)/(.*)/aaa

    3

    提取与替换。

    按照正则表达式规范,转发条件路径中的两个(.*)分别提取到cccbbb,并分别保留至转发动作中重写路径中的${1}${2}

    • ${1}替换为ccc

    • ${2}替换为bbb

    4

    拼接路径。

    后端服务器接收到的路径:/ccc/bbb

说明

如果重定向的路径为默认的${port},则表示动态替换为原始的请求路径。例如转发条件中的路径为/test/aaa,则转发动作匹配到的路径为/test/aaa

查阅配置介绍

查阅的内容指URL中问号后面的部分。如果重定向的查询为默认的${query},则表示动态替换为原始请求的查询参数。

示例:

客户端访问的URLwww.example.com/test/test1?x=1,则查询的内容为x=1

重定向策略配置介绍

如果您需要配置重定向策略,需要配置协议、域名、访问端口、Path、查询和状态码等参数。

协议介绍

  • 如果前端协议为HTTP,支持将HTTP请求重定向另一个HTTP或重定向至HTTPS。

  • 如果前端协议为HTTPS,支持将HTTPS请求重定向另一个HTTPS。

说明

如果重定向的协议为默认的$(protocol),则表示动态替换为原始请求的协议。

域名介绍

转发动作中的域名配置和转发条件中的域名配置方式一样。具体配置,请参见域名配置介绍

说明

如果重定向的域名为默认的${host},则表示动态替换为原始请求的域名。

访问端口介绍

配置对应协议的监听端口。例如,当HTTP请求(访问端口:80)重定向到HTTPS(访问端口:443)。

说明

如果重定向的访问端口为默认的${port},则表示动态替换为原始请求的端口。

Path介绍

转发条件的路径配置正则表达式后,转发动作中的路径支持正则表达式替换。关于如何添加转发规则,请参见为应用设置路由规则(ALB)

  • 注意事项

    • 转发条件中正则表达式中包含的半角圆括号()需要与转发动作中重定向路径中$变量的个数保持一致。

    • 转发动作中重定向的路径中需要包含${1}${2}${3}中的一个或多个,且这三个变量不支持使用其他字符代替。

  • 替换原理

    1. 路径匹配:客户端发送请求,并匹配到某一条路径转发规则的正则表达式。

    2. 提取与替换:按照正则表达式的规范提取,将前三个半角圆括号()提取出来的内容分别保存至${1}${2}${3}中,用于在转发动作的重定向路径中替换。

    3. 拼接:按照转发动作中重定向路径的配置,对其中的${1}${2}${3}进行值的替换,最终拼接成重写的实际路径。

    编号

    步骤

    示例

    1

    配置转发规则中的转发条件和转发动作。

    • 转发条件路径:/sys/(.*)/(.*)/aaa

    • 转发动作重定向路径:/${1}/${2}

    2

    客户端发送请求,并匹配路径。

    • 客户端发送的请求路径:/sys/ccc/bbb/aaa

    • 匹配到的转发条件路径:/sys/(.*)/(.*)/aaa

    3

    提取与替换。

    按照正则表达式规范,转发条件路径中的两个(.*)分别提取到cccbbb,并分别保留至转发动作中重定向路径中的${1}${2}

    • ${1}替换为ccc

    • ${2}替换为bbb

    4

    拼接路径。

    后端服务器接收到的路径:/ccc/bbb

说明

如果重定向的路径为默认的${port},则表示动态替换为原始的请求路径。例如转发条件中的路径为/test/aaa,则转发动作匹配到的路径为/test/aaa

查询介绍

查阅的内容指URL中问号后面的部分。如果重定向的查询为默认的${query},则表示动态替换为原始请求的查询参数。

示例:

客户端访问的URLwww.example.com/test/test1?x=1,则查询的内容为x=1

状态码介绍

ALB重定向状态码默认为301,您可以根据业务需求选择其他重定向状态码。ALB支持的重定向状态码及说明如下:

状态码

说明

301

表示永久重定向。

302

表示临时重定向。

303

表示请求的资源可通过另一个URL获取(查看其他位置)。

307

表示请求的资源临时移动到另一个位置(临时重定向,保留方法)。

308

表示请求的资源已永久移动到新位置(永久重定向,保留方法)。