通常,可利用 Akamai 等内容交付网络推送距离最终用户较近的内容。CDN 还可以提供服务(例如 SSL 卸载)距离客户端较近的服务和全局站点负载均衡。可以将 NSX Advanced Load Balancer 配置为 Akamai 的端点,Akamai 会将连接或请求转发到 NSX Advanced Load Balancer,然后路由到源服务器。

默认情况下,无需对 NSX Advanced Load Balancer 进行任何配置更改,即可接受从 Akamai 发送的流量并使这些流量进行负载均衡。Akamai 的流量转发和运行状况监控将正常运行,而无需进行任何更改。但有时可能需要进行一些配置更改。下面介绍了最常见的设置。

针对 Akamai 优化 NSX Advanced Load Balancer

  • 连接多路复用

    模板 > HTTP 应用程序配置文件中,确保启用了连接多路复用选项。这是默认设置,对于唯一区分可能通过单个 TCP 连接传输的多个客户端而言非常重要。

  • Cookie 持久性

    对于 HTTP 流量,Akamai 和 NSX Advanced Load Balancer 建议使用 Cookie 实现持久性。导航到模板 > 持久性 > HTTP Cookie,然后选中始终发送复选框。由于 Akamai 可能会通过单个 TCP 连接发送来自多个客户端的请求,因此必须将每个请求视为潜在的唯一客户端。

  • True-Client-IP

    当客户端通过 HTTP(或解密的 HTTPS)连接到 Akamai 时,Akamai 会对客户端的源地址进行 NAT 处理,以将其转换为本地 Akamai 端点 IP。可以将原始客户端 IP 地址插入到名为 True-Client-IP 的 HTTP 标头中。默认情况下,NSX Advanced Load Balancer 使用行业标准 X-Forwarded-For 选项实现此目的。NSX Advanced Load Balancer 可以重命名 True-Client-IP 标头、保留该标头,或通过策略或 DataScript 执行其他操作。

    以下示例显示了利用 True-Client-IP HTTP 标头(而不是在 TCP 标头中收到的 IP)的源 IP 持久性。

    -- HTTP Request Event
    
    pool = "poolname"
    ip = avi.http.get_header("True-Client-IP")
    
    if not ip then ip = avi.vs.client_ip() end
    val = avi.vs.table_lookup(ip)
    if val then
      avi.pool.select(pool, val)
    else
      avi.http.set_reqvar("persistIP", val)
    end
    
    -- HTTP Response Event
    if not avi.http.get_reqvar("persistIP", 1) then
      -- Persistence entry does not exist, add to table with a 300 second timeout
      avi.vs.table_insert(avi.http.get_reqvar("persistIP",  avi.vs.server_ip(), 300)
    end