• 文档
  • 控制台
  • 登录
  • 立即注册
    目前不支持用户自主注册,如需注册账号,请联系400-080-1100
服务器负载均衡 SLB
下载PDF

5 服务支持

5.1 常见问题

1.HTTP和HTTPS协议的监听器转发规则中间动作典型配置举例

HTTP和HTTPS协议的监听器在添加转发规则时,支持配置中间动作,如下是部分动作类型的典型配置,可供参考。

请求报文:Header自定义脚本

#设置header

ngx.req.set_header('Host', 'modify')

#增加header

ngx.req.set_header('Test', 'add')

#删除header

ngx.req.clear_header("Test_Ngx_Ver")

请求报文:Body自定义脚本

#重写body脚本demo

ngx.req.read_body()

local data = "{'data':'modified request body'}"

ngx.req.set_body_data(data)

#追加body脚本demo

ngx.req.read_body()

local data = ngx.req.get_body_data()

if data then

 data = data .. 'append'

 ngx.req.set_body_data(data)

else

 ngx.req.set_body_data('append')

end

#替换body

ngx.req.read_body()

local data = ngx.req.get_body_data()

if data then

 local find_str = "req_body"

 local replace_str = "req_body_modified"

 local new_data = string.gsub(data, find_str, replace_str)

 ngx.req.set_body_data(new_data)

end

应答报文:Header自定义脚本

#删除Header

ngx.header['Vary'] = nil

ngx.header['Server'] = nil

#增加或修改Header

ngx.header['Server'] = 'modify'

ngx.header['Nginx'] = 'add'

应答报文:Body自定义脚本

#重写脚本demo

local data, eof = ngx.arg[1], ngx.arg[2]

#可以通过检查ngx.arg[2]参数的值,该值表示当前块是否是请求体的最后一个块

local rewrite_str = '{"data":"rewrite response body"}\n'

ngx.arg[1] = nil

#如果不是最后一个块,则清空

if eof then

 ngx.arg[1] = rewrite_str

#如果是最后一个块,则设置为重写的值

end

#追加脚本demo

local data, eof = ngx.arg[1], ngx.arg[2]

local append_str = '{"data":"append response body"}\n'

if eof then

 if ngx.arg[1] then

 ngx.arg[1] = ngx.arg[1] .. append_str

 else

 ngx.arg[1] = append_str

 end

end

#替换body

local data, eof = ngx.arg[1], ngx.arg[2]

if data then

 local find_str = "scheme"

 local replace_str = 'modify response body'

 local modified_body = string.gsub(data, find_str, replace_str)

 ngx.arg[1] = modified_body

end

如果服务器返回的应答报文携带了Content-Length、Content-Type的Header,同时添加了“应答报文:Body自定义脚本”的中间动作,导致应答的长度和类型发生了变化,则需要添加“应答报文:Header自定义脚本”,修改Content-Length、Content-Type的Header为对应值。如果Content-Length未知,则可删除Content-Length,设为为nil。

“应答报文:Header自定义脚本”的配置示例如下:

ngx.header['Content-Length'] = ngx.header['Content-Length'] + 13

ngx.header['Content-Length'] = nil

ngx.header['Content-Type'] = "text/plain"

2.负载均衡实例的“跨VPC后端”功能开启和关闭有什么区别?

开启“跨VPC后端”功能,负载均衡器的系统计算资源将不再占用保留网段的IP,保留网段默认为169.254.252.0/23。负载均衡器会从VIP所在子网,额外自动占用2-8个IP作为负载均衡器计算的系统资源IP。开启此功能,需要保障最多9个IP可用。

由于使用用户子网的资源,用户可以配置负载均衡器的系统资源的路由,实现跨VPC访问。

默认不开启“跨VPC后端”的场景如图3-1所示,为了减少用户子网IP占用,使用了保留子网。所有VPC负载均衡器占用相同的保留子网,当前客户无法自定义配置路由策略。

图5-1不开启“跨VPC后端”场景

微信截图_20241019095022.png

开启“跨VPC后端”的场景如图3-2所示,负载均衡器系统资源全部分布在用户子网,可以灵活的配置路由。

图5-2开启“跨VPC后端”场景

微信截图_20241019095058.png

3.什么时候使用负载均衡器的“跨VPC后端”功能?

目前开启“跨VPC后端”功能,将会使用户能够自由的配置负载均衡器的系统资源的路由表,实现跨VPC访问能力,包括负载均衡器跨VPC访问后端和跨VPC的客户端访问负载均衡器。

另外,跨VPC访问会消耗额外的计算资源,当有大量应用需要跨VPC访问时,仍然建议将这些服务放到同一个VPC内部。

4.新增跨VPC访问需求时,如何配置负载均衡器做到平滑演进?

对于已经创建的负载均衡器,由于系统资源已经创建,无法平滑开启“跨VPC后端”功能,所以需要另外创建新的支持“跨VPC后端”的负载均衡实例。

如果新的负载均衡器需要使用以前的负载均衡器的VIP,有如下两种方法:

删除原有的负载均衡器,新建支持“跨VPC后端”功能的负载均衡器,并且创建时指定原有VIP地址。

新建支持“跨VPC后端”功能的负载均衡器,利用负载均衡器支持VIP地址池功能,解绑原有负载均衡器的VIP并绑定到新的负载均衡器。

5.如何实现跨VPC访问SLB或者SLB跨VPC访问后端服务IP?

目前,可以通过开启“跨VPC后端”将负载均衡器的系统资源配置到用户子网,通过配置子网路由打通跨VPC的访问能力。

以典型的对等连接为例,说明如下:

微信截图_20241019095138.png

操作步骤如下:

创建两个VPC的Peer对Peer的对等连接,对等连接的创建需要确保两个VPC的子网不冲突。

微信截图_20241019095209.png

(2)配置两个VPC路由策略,将两个VPC子网指向对端。

客户端子网

微信截图_20241019095243.png

负载均衡器子网

微信截图_20241019095312.png

(3)创建负载均衡器时,启用“跨VPC后端”功能,需要确保选择的“子网”在路由策略生效的范围内。

微信截图_20241019095344.png

创建后可以查看负载均衡器系统资源占用情况:

微信截图_20241019095417.png

5.2 相关协议

意见反馈

文档内容是否对您有帮助?

如您有其他疑问,您也可以通过在线客服来与我们联系探讨 在线客服

联系我们
回到顶部