其他分享
首页 > 其他分享> > Traffic Server(简一)

Traffic Server(简一)

作者:互联网

Apache Traffic Server 教程

目录

一、简介

Apache Traffic Server™ 是一种高性能 Web 代理缓存,它通过在网络边缘缓存经常访问的信息来提高网络效率和性能。这使内容在物理上更接近最终用户,同时实现更快的交付并减少带宽使用。Traffic Server 旨在通过最大化现有和可用带宽来改善企业、互联网服务提供商 (ISP)、骨干提供商和大型 Intranet 的内容交付。

Apache Traffic Server(ATS或TS)是一个高性能的、模块化的HTTP代理和缓存服务器,与 Nginx 和 Squid 类似。Traffic Server最初是 Inktomi 公司的商业产品,该公司在2003 年被 Yahoo 收购, 2009 年 8月 Yahoo 向 Apache 软件基金会(ASF)贡献了源代码,并于 2010 年 4月成为了 ASF的顶级项目(Top-LevelProject)。 Apache TrafficServer 现在是一个开源项目,开发语言为C++。

1、术语

源服务器

生成您希望使用 Traffic Server 代理(和可选缓存)的内容的服务器。在转发代理配置中,源服务器可以是代理客户端尝试连接的任何远程服务器。在反向代理配置中,源服务器通常是一组已知的服务器,您使用 Traffic Server 作为性能增强缓存层。

反向代理

反向代理在外部用户看来就好像它是源服务器,但它本身并不生成内容。相反,它拦截请求,并根据配置的规则和其缓存的内容,将提供所请求内容本身的缓存副本,或将请求转发到源服务器,可能缓存返回的内容以供将来的请求使用.

正向代理

转发代理代理对外部资源的访问,拦截来自网络的所有匹配的出站流量。转发代理可用于加速对连接速度较慢的位置的外部访问(通过缓存外部资源并在将来直接使用这些缓存的副本来服务请求),或者可用于限制或监视外部访问。

透明代理

透明代理可以是反向代理也可以是正向代理(尽管几乎所有反向代理都是透明部署的),其定义特征是使用网络路由通过代理发送请求,而无需客户端配置自己这样做,并且通常这些客户端无法绕过代理。

二、代理缓存机制

1、HTTP代理缓存

HTTP 代理缓存使您能够存储经常访问的 Web 对象(例如文档、图像和文章)的副本,然后按需将此信息提供给用户。它提高了性能并为其他任务释放了 Internet 带宽。

2、了解HTTP Web代理缓存

Internet 用户将他们的请求定向到 Internet 上的 Web 服务器。缓存服务器必须充当Web 代理服务器,才能为这些请求提供服务。在 Web 代理服务器接收到对 Web 对象的请求后,它要么为请求提供服务,要么将它们转发到源服务器(包含所请求信息的原始副本的 Web 服务器)。Traffic Server 代理支持显式代理缓存,其中用户的客户端软件必须配置为直接向 Traffic Server 代理发送请求。以下概述说明了 Traffic Server 如何处理请求。

  1. Traffic Server 接收到一个 Web 对象的客户端请求。
  2. 使用对象地址,Traffic Server 尝试在其对象数据库(缓存)中定位请求的对象。
  3. 如果对象在缓存中,Traffic Server 会检查对象是否新鲜到可以提供服务。如果它是新鲜的,则 Traffic Server 将其作为缓存命中提供给客户端(见下图)。
  4. 如果缓存中的数据是陈旧的,则 Traffic Server 连接到源服务器并检查对象是否仍然是新鲜的( 重新验证)。如果是,则 Traffic Server 立即将缓存的副本发送给客户端。
  5. 如果对象不在缓存中(缓存未命中)或者服务器指示缓存的副本不再有效,则 Traffic Server 从源服务器获取对象。然后该对象同时流式传输到客户端和 Traffic Server 本地缓存(见下图)。由于直接从缓存中检索对象,因此可以更快地处理对该对象的后续请求。

3、确保缓存对象的新鲜(fresh)度

当 Traffic Server 收到对 Web 对象的请求时,它首先尝试在其缓存中定位请求的对象。如果对象在缓存中,Traffic Server 会检查对象是否新鲜(fresh)到可以提供服务。对于 HTTP 对象,Traffic Server 支持由管理员可选的指定到期日期。Traffic Server 遵守这些到期日期;否则,它会根据对象更改的频率和管理员选择的新鲜(fresh)度指南来选择到期日期。还可以通过与源服务器检查对象是否仍然新鲜来重新验证对象。

1)HTTP对象新鲜(fresh)度

Traffic Server 通过依次检查以下条件来确定缓存中的 HTTP 对象是否新鲜:

2)修改新鲜度计算的老化因子

如果一个对象不包含任何过期信息,那么 Traffic Server 可以从Last-ModifiedDate标头估计其新鲜度。默认情况下,Traffic Server 存储对象的时间是自上次更改以来所用时间的 10%。您可以根据需要增加或减少百分比。
要修改新鲜度计算的老化因子,在records.config进行编辑:

  1. 更改的值proxy.config.http.cache.heuristic_lm_factor
  2. 运行命令以应用配置更改。traffic_ctl config reload

3)设置绝对新鲜度限制

有些对象没有Expires标头或没有标头 Last-ModifiedDate标头。要控制这些对象在缓存中被视为新鲜的时间,请指定绝对新鲜度限制
要指定绝对新鲜度限制,在records.config进行编辑:

  1. 编辑变量proxy.config.http.cache.heuristic_min_lifetimeproxy.config.http.cache.heuristic_max_lifetime
  2. 运行命令以应用配置更改。traffic_ctl config reload

4)指定标题要求

为了进一步确保缓存中对象的新鲜度,将 Traffic Server 配置为仅缓存具有特定标头的对象。默认情况下,Traffic Server 缓存所有对象(包括没有头的对象);您应该仅针对专门的代理情况更改默认设置。如果您将 Traffic Server 配置为仅缓存带有Expiresmax-age标头的 HTTP 对象,那么缓存命中率将显着降低(因为很少有对象具有明确的过期信息)。
配置 Traffic Server 缓存具有特定头部的对象,在records.config进行编辑:

  1. proxy.config.http.cache.required_headers更改in的值。
  2. 运行命令以应用配置更改。traffic_ctl config reload

5)缓存控制标头

即使缓存中的对象可能是新鲜的,客户端或服务器通常也会施加自己的约束,从而阻止从缓存中检索对象。例如,客户端可能请求不从缓存中检索对象,或者如果它确实允许缓存检索,那么它的缓存时间不能超过 10 分钟。
Traffic Server 将缓存对象的可服务性基于Cache-Control 出现在客户端请求和服务器响应中的标头。以下 Cache-Control标头影响是否从缓存中提供对象:

6)重新验证 HTTP 对象

当客户端请求缓存中陈旧的 HTTP 对象时,Traffic Server 会重新验证该对象。重新验证是对原始服务器的查询,以检查对象是否未更改。重新验证的结果是以下之一:

默认情况下,如果 Traffic Server 认为该对象是陈旧的,它会在缓存中重新验证请求的 HTTP 对象。Traffic Server 评估对象的新鲜度,如HTTP Object Freshness中所述。您可以通过选择以下选项之一来重新配置 Traffic Server 评估新鲜度的方式:

  1. 编辑在records.config中的变量proxy.config.http.cache.when_to_revalidate
  2. 运行命令以应用配置更改。traffic_ctl config reload

4、配置文件大全

https://docs.trafficserver.apache.org/en/9.1.x/admin-guide/files/index.en.html

三、Traffic Server基础

1、编译安装

1)更新gcc

yum -y install centos-release-scl 
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils 
scl enable devtoolset-9 bash

需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

2)下载Traffic Server

wget -O  ./trafficserver-8.1.4.tar.bz2 https://dlcdn.apache.org/trafficserver/trafficserver-8.1.4.tar.bz2

tar xf trafficserver-8.1.4.tar.bz2

ln -s trafficserver-8.1.4 trafficserver

3)安装依赖包

yum install autoconf automake libtool pkgconfig perl-ExtUtils-MakeMaker openssl-devel pcre-devel ncurses-devel libcurl-devel  libcap-devel hwloc-devel flex tcl tcl-devel python3

4)编译安装

cd  trafficserver

useradd trafficserver

./configure --with-user=trafficserver --with-group=trafficserver --prefix=/etc/traffic_server 

make && make check

make install 

5)编译卸载及清除编译

make uninstall 

make clean

6)配置环境

对当前用户永久生效:
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/etc/traffic_server/bin

临时生成生效:
export PATH=$PATH:$HOME/bin:/etc/traffic_server/bin

四、反向代理http

使用转发代理缓存,Traffic Server 代表请求内容的客户端处理对源服务器的 Web 请求。反向代理缓存(也称为服务器加速)是不同的,因为 Traffic Server 代表存储内容的源客户端充当代理缓存。Traffic Server 被配置为外在的行为是客户端尝试连接的源服务器。在典型情况下,源客户端的主机名解析为 Traffic Server,后者直接服务于客户端请求,并在必要时从真正的源服务器获取内容。

当浏览器发出请求时,它通常将该请求直接发送到源服务器。当 Traffic Server 处于反向代理模式时,它会在请求到达源服务器之前拦截它。通常,这是通过为源客户端设置 DNS 条目(即源客户端的主机名)来完成的,因此它解析为 Traffic Server IP 地址。当 Traffic Server 被配置为源服务器时,浏览器连接到 Traffic Server 而不是源服务器。

1、HTTP反向代理详解

在反向代理模式下,Traffic Server 代表 Web 服务器处理 HTTP 请求。

  1. 客户端浏览器发送一个 HTTP 请求,地址是在端口 80 上调用的主机 www.host.com。Traffic Server 接收该请求,因为它充当源服务器(源服务器的广告主机名解析为 Traffic Server)。
  2. Traffic Server 在remap.config文件中找到一个映射规则,并将请求重新映射到指定的源服务器 ( realhost.com)。
  3. 如果无法从缓存中提供请求,Traffic Server 会打开到源服务器的连接(或者更有可能使用它预先建立的现有连接),检索内容,并可选择将其缓存以供将来使用。
  4. 如果请求是缓存命中并且缓存中的内容仍然是新鲜的,或者由于第 3 步,内容现在可以通过 Traffic Server 获得,则 Traffic Server 直接将请求的对象从缓存中发送到客户端。
PS:Traffic Server 在从源服务器更新自己的缓存时,会在更新其缓存数据库的同时将该内容传送到客户端。一旦 Traffic Server 收到并处理了来自源服务器的完整响应标头,对包含请求对象的客户端的响应就会开始。

2、处理源服务器重定向响应

源服务器经常将重定向响应发送回浏览器,将它们重定向到不同的页面。例如,如果源服务器过载,则它可能会将浏览器重定向到负载较少的服务器。当网页移动到不同的位置时,源服务器也会重定向。当 Traffic Server 配置为反向代理时,它必须重新寻址来自源服务器的重定向,以便浏览器重定向到 Traffic Server 而不是另一个源服务器。

为了重新寻址重定向,Traffic Server 使用反向映射规则。除非您已proxy.config.url_remap.pristine_host_hdr启用(默认),否则您通常应该为每个映射规则设置一个反向映射规则。

3、使用 HTTP 请求的映射规则

Traffic Server 使用两种类型的 HTTP 反向代理映射规则。

1)地图规则

映射规则将客户端请求中的 URL 转换为内容所在的 URL。当 Traffic Server 处于反向代理模式并接收到 HTTP 客户端请求时,它首先从相对 URL 及其标头构造一个完整的请求 URL。然后,Traffic Server 通过将完整的请求 URL 与其目标 URL 列表进行比较来查找匹配项remap.config。要使请求 URL 与目标 URL 匹配,必须满足以下条件:

如果 Traffic Server 找到匹配项,那么它将请求 URL 转换为映射规则中列出的替换 URL:它设置请求 URL 的主机和路径以匹配替换 URL。如果 URL 包含路径前缀,则 Traffic Server 删除与目标 URL 路径匹配的路径前缀,并将其替换为替换 URL 中的路径。如果两个映射与请求 URL 匹配,则 Traffic Server 应用 中列出的第一个映射remap.config

2)反向映射规则

反向映射规则将源服务器重定向响应中的 URL 转换为指向 Traffic Server,以便客户端被重定向到 Traffic Server,而不是直接访问源服务器。例如,如果/pub源服务器上 有一个目录,www.molasses.com并且客户端向该源服务器发送请求/pub,则源服务器可能会通过发送 Header 来回复重定向,让客户端知道它是它拥有的目录请求,而不是文档(重定向的常见用途是规范化 URL,以便客户端可以正确地为文档添加书签)。Location: http://realhost.com/pub/

Traffic Server 使用reverse_map规则来防止客户端(从源服务器接收重定向)绕过 Traffic Server 并直接访问源服务器。在许多情况下,客户会碰壁,因为realhost.com实际上并没有为客户解决问题。(例如:因为它运行在被防火墙屏蔽的端口上,或者因为它运行在不可路由的 LAN IP 上)

映射和反向映射规则都包含一个目标(原始)URL 和一个替换(目标)URL。在映射规则中,目标 URL 指向 Traffic Server,替换 URL 指定原始内容所在的位置。在反向映射规则中,目标 URL 指定原始内容的位置,替换 URL 指向 Traffic Server。Traffic Server 将映射规则存储 remap.config在 Traffic Serverconfig目录中。

4、为 HTTP 请求创建映射规则

创建映射规则:

  1. 在 中输入映射和反向映射规则remap.config
  2. 运行命令以应用配置更改traffic_ctl config reload

5、启用 HTTP 反向代理

要启用 HTTP 反向代理:

  1. records.config中编辑proxy.config.reverse_proxy.enabled

    CONFIG proxy.config.reverse_proxy.enabled INT 1
    
  2. 运行命令以应用配置更改traffic_ctl config reload

6、设置可选的 HTTP 反向代理选项

Traffic Server 提供了几个反向代理配置选项 records.config`,使您能够:

运行命令以应用任何这些配置更改traffic_ctl config reload

7、重定向 HTTP 请求

您可以将 Traffic Server 配置为重定向 HTTP 请求,而无需联系任何源服务器。例如,如果您将所有对http://www.ultraseek.comto 的请求重定向http://www.server1.com/products/portal/search/,那么所有对 go 的 HTTP 请求www.ultraseek.com都将直接指向 www.server1.com/products/portal/search

您可以配置 Traffic Server 执行永久或临时重定向。永久重定向通知浏览器 URL 更改(通过返回 HTTP 状态代码301),以便浏览器可以更新书签。临时重定向仅通知浏览器当前请求的 URL 更改(通过返回 HTTP 状态代码 307)。

设置重定向规则:

  1. 对于您要设置的每个重定向,请在remap.config中输入映射规则。
  2. 运行命令以应用配置更改traffic_ctl config reload

8、例子

以下内容将所有 HTTP 请求永久重定向 www.server1.com到 to www.server2.com

redirect http://www.server1.com http://www.server2.com

五、缓存存储

Traffic Server 缓存由一个称为对象存储的高速对象数据库组成,它根据 URL 及其关联的标头索引缓存对象。

1、Traffic Server 缓存

Traffic Server 缓存由称为对象存储的高速对象数据库组成。对象存储根据 URL 和关联的标头索引缓存对象。这使 Traffic Server 不仅可以存储、检索和服务网页,还可以存储网页的部分内容——这提供了最佳的带宽节省。使用复杂的对象管理,对象存储可以缓存 同一对象的替代]版本(版本可能因不同的语言或编码类型而不同)。它还可以有效地存储非常小和非常大的文档,从而最大限度地减少空间浪费。当缓存已满时,Traffic Server 会删除陈旧的数据,以确保最常请求的对象随时可用且保持新鲜。

Traffic Server 旨在容忍任何缓存磁盘上的总磁盘故障。如果磁盘完全失效,Traffic Server 会将整个磁盘标记为损坏并继续使用剩余的磁盘。然后会创建警报以指示哪个磁盘发生故障。如果所有缓存磁盘都出现故障,则 Traffic Server 进入仅代理模式。

您可以执行以下缓存配置任务:

2、RAM 缓存

Traffic Server 维护一个非常流行的对象的小型 RAM 缓存。此 RAM 缓存会尽快为最流行的对象提供服务,并减少磁盘上的负载,尤其是在临时流量高峰期间。您可以配置 RAM 缓存大小以满足您的需要,如下面的更改 RAM 缓存大小中所述。

RAM 缓存支持两种缓存逐出算法,一种常规LRU (最近最少使用,Least Recently Used)和更高级的CLFUS(按大小计时钟最少使用频率,Clocked Least Frequently Used by Size;它平衡最近性、频率和大小以最大化命中率,类似于最常用的算法)。默认是使用LRU,这是通过 控制的 proxy.config.cache.ram_cache.algorithm

LRU和CLFUS RAM 缓存支持增加扫描阻力的配置。在典型的LRU中,如果您按顺序请求所有可能的对象,您将在每个请求上有效地更换缓存。proxy.config.cache.ram_cache.use_seen_filter可以设置该选项以增加对这个问题的抵抗力。

此外,CLFUS还支持在 RAM 缓存本身中进行压缩。这对于自身未压缩的内容(例如图像)很有用。这不应与Content-Encoding: gzip混淆,此功能仅用于在 RAM 缓存本身内部节省空间。因此,它对 User-Agent 是完全透明的。RAM 缓存压缩通过proxy.config.cache.ram_cache.compress 选项启用。

3、更改 RAM 缓存的大小

Traffic Server 提供专用的 RAM 缓存,用于快速检索流行的小对象。默认 RAM 缓存大小是根据您配置的缓存分区的数量和大小自动计算的 。如果您已根据协议和/或主机对缓存进行分区,则每个分区的 RAM 缓存大小与该分区的大小成正比。

您可以增加 RAM 缓存大小以获得更好的缓存命中性能。但是,如果您增加 RAM 缓存的大小并观察到性能下降(例如延迟增加),则操作系统可能需要更多内存来存储网络资源。在这种情况下,您应该将 RAM 缓存大小恢复为之前的值。

1)要更改 RAM 缓存大小

  1. 停止 Traffic 服务器。
  2. 设置变量proxy.config.cache.ram_cache.size以指定 RAM 缓存的大小。默认值-1表示 RAM 缓存的大小自动调整为每 GB 磁盘大约 1MB。
  3. 重启 Traffic 服务器。如果您将 RAM 缓存增加到 1GB 或更多,请使用trafficserver命令重新启动。

2)禁用 RAM 缓存

可以禁用 RAM 缓存。如果您已使用 配置了存储,则可以向希望禁用它volume.config的任何卷添加可选指令。ramcache=false这对于由 RAM 磁盘等存储组成的卷可能是理想的,您可能希望避免双 RAM 缓存。

4、更改缓存容量

您可以在不清除内容的情况下增加或减少分配给缓存的磁盘空间总量。要检查高速缓存的大小(以字节为单位),请输入命令。traffic_ctl metric get proxy.process.cache.bytes_total

增加缓存容量

要增加分配给现有磁盘缓存的磁盘空间总量,或者向 Traffic Server 节点添加新磁盘:

  1. 停止交通服务器。
  2. 如有必要,添加硬件。
  3. 编辑storage.config以增加分配给现有磁盘上缓存的磁盘空间量或描述您要添加的新硬件。
  4. 重启交通服务器。

减少缓存容量

要减少分配给现有磁盘上缓存的磁盘空间总量,或从 Traffic Server 节点中删除磁盘:

  1. 停止交通服务器。
  2. 如有必要,卸下硬件。
  3. 编辑storage.config以减少分配给现有磁盘上缓存的磁盘空间量,或删除对要删除的硬件的引用。
  4. 重启交通服务器。
重要:在`storage.config`中,格式化或原始磁盘必须至少为 128 MB。

5、对缓存进行分区

您可以通过创建 缓存卷来管理缓存空间 并限制来自特定源服务器和/或域的磁盘使用。

1)根据源服务器或域对缓存进行分区

您可以将创建的卷分配给特定的源服务器和/或域。您可以将卷分配给单个源服务器或多个源服务器。但是,如果将一个卷分配给多个源服务器,则无法保证每个源服务器的卷中的可用空间。内容根据受欢迎程度存储在卷中。除了将卷分配给特定的源服务器和域之外,您还必须分配一个通用卷来存储来自所有未列出的源服务器和域的内容。如果特定源服务器或域的分区损坏,也会使用此通用卷。如果您不分配通用卷,则 Traffic Server 将以仅代理模式运行。卷不需要具有相同的大小。

PS:
在将卷分配给特定主机或域之前,您无需停止 Traffic Server。但是,这种类型的配置非常耗时,并且可能导致内存使用量激增。因此,最好在低流量期间配置分区分配。

根据主机名和域对缓存进行分区:

  1. 在文件中输入一行hosting.config以分配用于每个源服务器和/或域的卷。
  2. 分配一个通用卷以用于不属于文件中列出的任何原始服务器或域的内容。如果特定源服务器的所有卷都损坏了,则 Traffic Server 还将使用通用卷来存储该源服务器的内容hosting.config
  3. 运行traffic_ctl config reload命令以应用配置更改。

6、配置缓存对象大小限制

默认情况下,Traffic Server 允许缓存任意大小的对象。您可以通过以下步骤更改默认行为并指定缓存中对象的大小限制:

  1. 设置proxy.config.cache.max_doc_size以指定缓存中对象允许的最大大小(以字节为单位)。设置为0(零)将允许缓存对象的大小不受限制。
  2. 运行traffic_ctl config reload命令以应用配置更改。

7、清除缓存

当您清除缓存时,您会从整个缓存中删除所有数据 - 包括主机数据库中的数据。您应该在执行某些缓存配置任务(例如分区)之前清除缓存。当 Traffic Server 运行时,你不能清除缓存。

要清除缓存:

  1. 停止 Traffic Server。

  2. 输入以下命令清除缓存:

    traffic_server -Cclear
    

    clear命令删除对象存储和主机数据库中的所有数据。Traffic Server 不会提示您确认删除。

  3. 重新启动 Traffic Serve。

8、从缓存中删除对象

PURGE当从缓存中删除特定对象时,Traffic Server 接受自定义 HTTP 请求方法。如果在缓存中找到对象并成功删除,则 Traffic Server 以 HTTP 消息响应200 OK;否则,返回一条消息404 File Not Found

PS:默认情况下,只有在 localhost 接口上接收到 PURGE 请求方法时才会处理。

六、Security

1、控制访问

Traffic Server 可以配置为只允许某些客户端使用代理缓存。

  1. ip_allow.yaml为允许访问 Traffic Server 的每个 IP 地址或 IP 地址范围添加一行。
  2. 运行traffic_ctl config reload命令以应用配置更改。

1)格式

ip_allow.yaml是 YAML 格式。默认配置是

# YAML
ip_allow:
  - apply: in
    ip_addrs: 127.0.0.1
    action: allow
    methods: ALL
  - apply: in
    ip_addrs: ::1
    action: allow
    methods: ALL
  - apply: in
    ip_addrs: 0/0
    action: deny
    methods:
      - PURGE
      - PUSH
      - DELETE
  - apply: in
    ip_addrs: ::/0
    action: deny
    methods:
      - PURGE
      - PUSH
      - DELETE

每个规则都是一个映射。YAML 数据必须有一个顶级键“ip_allow”,其值必须是一个映射或一系列映射,每个映射都是一个规则。

规则中的键是:

可以通过多种方式指定 IP 地址范围。范围始终是 IPv4 或 IPv6,不允许有包含来自不同 IP 地址系列的地址的范围。

规则必须具有applyip_addrsaction键。规则仅基于 IP 地址匹配,然后应用于所有匹配的会话。如果规则是allow规则,则允许指定的方法,而拒绝所有其他方法。如果规则是deny规则,则拒绝指定的方法,并允许所有其他方法。

例如,从默认配置中,规则适用127.0.0.1allow所有方法。因此,允许来自环回地址 (127.0.0.1) 的入站连接使用任何方法。覆盖所有 IPv4 地址的通用 IPv4 规则是一条deny规则,因此当它与“PURGE”、“PUSH”和“DELETE”方法匹配时,这些方法将被拒绝,而允许任何其他方法。

这些规则按 IP 地址顺序匹配,因此一般 IPv4 规则不适用于环回地址,因为后者首先匹配。

inout规则之间应用的一个主要区别是,默认情况下,入站连接被拒绝,因此如果没有匹配的规则,则连接被拒绝。默认情况下出站连接是允许,因此默认配置中缺少规则会启用所有出站连接的所有方法。

2)例子

以下示例启用所有客户端访问:

apply: in
ip_addrs: 0.0.0.0-255.255.255.255
action: allow

如果整个子网都被拒绝,那就是:

apply: in
ip_addrs: 123.45.6.0/24
action: deny

以下示例拒绝访问特定子网上的所有服务器:

apply: out
ip_addr: 10.0.0.0-10.0.255.255
action: deny

作为最后一个示例,以下是紧凑形式的默认配置:

ip_allow: [
  { apply: in, ip_addrs: 127.0.0.1, action: allow },
  { apply: in, ip_addrs: "::1", action: allow },
  { apply: in, ip_addrs: 0/0, action: deny, methods: [ PURGE, PUSH, DELETE ] },
  { apply: in, ip_addrs: "::/0", action: deny, methods: [ PURGE, PUSH, DELETE ] }
  ]

2、SSL终止

Traffic Server SSL 终止选项使您能够以反向代理模式保护客户端与 Traffic Server 和/或 Traffic Server 与源服务器之间的连接。

以下部分介绍如何启用和配置 SSL 终止选项。

1)客户端和流量服务器连接

下图说明了客户端和 Traffic Server 之间(以及 Traffic Server 和源服务器之间)的通信,当 SSL 终止选项被启用并配置为仅用于 Client/Traffic Server 连接时。

上图描述了以下内容:

  1. 客户端发送内容的 HTTPS 请求。Traffic Server 接收请求并执行 SSL 握手以验证客户端(取决于配置的验证选项)并确定将使用的加密方法。如果允许客户端访问,Traffic Server 会检查其缓存中的请求内容。
  2. 如果请求是缓存命中并且内容是新鲜的,那么 Traffic Server 会加密内容并将其发送给客户端。客户端解密内容(使用握手期间确定的方法)并显示它。
  3. 如果请求是缓存未命中或缓存内容陈旧,则 Traffic Server 通过 HTTP 与源服务器通信并获取内容的纯文本版本。Traffic Server 将内容的纯文本版本保存在其缓存中,对内容进行加密,然后将其发送给客户端。客户端解密并显示内容。

要将 Traffic Server 配置为对 Client/Traffic Server 连接使用 SSL 终止选项,您必须执行以下操作:

  1. 从公认的证书颁发机构获取并安装 SSL 服务器证书。SSL 服务器证书包含使客户端能够验证 Traffic Server 并交换加密密钥的信息。

  2. records.configproxy.config.http.server_ports使用设置用于 SSL 通信的端口号 。

  3. 为您的 SSL 证书和私钥设置适当的基本路径records.config

    CONFIG proxy.config.ssl.server.multicert.exit_on_load_fail INT 0
    CONFIG proxy.config.ssl.server.multicert.filename STRING ssl_multicert.config
    CONFIG proxy.config.ssl.server.cert.path STRING /etc/traffic_server/ssl
    CONFIG proxy.config.ssl.server.private_key.path STRING /etc/traffic_server/ssl
    
  4. ssl_multicert.config为您的 Traffic Server 系统将用于终止与客户端的 SSL 连接的每个证书和密钥添加一个条目。

    dest_ip=1.2.3.4 ssl_cert_name=example.com.pem
    dest_ip=* ssl_cert_name=default.pem
    
  5. 可选proxy.config.ssl.client.certification_level:使用records.config中的变量配置客户端证书的使用 。如果您将 Traffic Server 配置为需要客户端证书,则 Traffic Server 在验证客户端的 SSL 握手期间验证客户端证书。如果您将 Traffic Server 配置为不需要客户端证书,或者如果您将证书配置为可选且连接的客户端不存在,则通过已设置的其他 Traffic Server 选项管理对 Traffic Server 的访问(例如ip_allow.yaml中的规则) .

    CONFIG proxy.config.ssl.client.certification_level INT 0
    

    此变量允许设置以下值之一:

    价值 描述
    0 不需要客户端证书。
    1 客户端证书可选。如果存在,将用于验证。
    2 需要客户端证书,并且必须根据配置的 CA 进行验证。
  6. 可选:配置证书颁发机构 (CA) 的使用。CA 通过验证请求证书的人的身份来增加安全性。可接受的 CA 签名者列表使用 在records.config中配置proxy.config.ssl.CA.cert.path

    CONFIG proxy.config.ssl.CA.cert.path STRING /opt/CA/certs/private-ca.pem
    
  7. 运行traffic_ctl server restart命令重启 Traffic Server。

2)流量服务器和源服务器连接

下图说明了当为 Traffic Server/源服务器连接启用 SSL 终止选项时,Traffic Server 和源服务器之间的通信

上图描述了以下内容:

  1. 如果客户端请求是缓存未命中或陈旧,则 Traffic Server 向源服务器发送内容的 HTTPS 请求。源服务器接收请求并执行 SSL 握手以验证 Traffic Server 并确定要使用的加密方法。
  2. 如果 Traffic Server 被允许访问,那么源服务器会加密内容并将其发送到 Traffic Server,在此解密(使用握手期间确定的方法)。如果 Traffic Server 认为内容可缓存,则内容的纯文本版本会保存在缓存中。
  3. 如果为 Client/Traffic Server 连接启用 SSL 终止,则 Traffic Server 会重新加密内容并通过 HTTPS 将其发送到客户端,并在客户端进行解密和显示。如果没有为 Client/Traffic Server 连接启用 SSL 终止,则 Traffic Server 通过 HTTP 将内容的纯文本版本发送到客户端。

要将 Traffic Server 配置为对 Traffic Server 和源服务器连接使用 SSL 终止选项,您必须执行以下操作:

  1. 首先确保您的源服务器正确响应 SSL 请求,如果您打算将其用作访问控制方案的一部分,请对其进行配置以进行客户端证书验证。

    有关详细信息,请参阅您的源服务器的文档。如果您的源服务器是另一个 Traffic Server 系统,那么您可以按照客户端和 Traffic Server 连接中列出的步骤来配置源服务器以验证客户端证书。

  2. 可选:如果您的源服务器需要客户端证书验证以进行访问控制,则从公认的证书颁发机构获取并安装 SSL 客户端证书。您的客户端证书必须由您的原始服务器认可的证书颁发机构签名。

    如果您使用的是客户端证书,则必须将其位置添加到 records.config设置proxy.config.ssl.client.cert.pathproxy.config.ssl.client.cert.filename

    CONFIG proxy.config.ssl.client.cert.path STRING /etc/traffic_server/etc/trafficserver/ssl/client/
    CONFIG proxy.config.ssl.client.cert.filename STRING client.pem
    

    您还必须提供此证书的私钥的路径,除非该密钥包含在与证书相同的文件中,使用 proxy.config.ssl.client.private_key.pathproxy.config.ssl.client.private_key.filename

    CONFIG proxy.config.ssl.client.private_key.path STRING /etc/traffic_server/etc/trafficserver/ssl/client/
    CONFIG proxy.config.ssl.client.private_key.filename STRING client.key
    
  3. records.config配置proxy.config.ssl.client.verify.server.policy根据您的安全策略启用或禁用使用的服务器 SSL 证书验证。

    CONFIG proxy.config.ssl.client.verify.server.policy STRING ENFORCED
    
  4. records.config使用设置proxy.config.ssl.client.CA.cert.pathproxy.config.ssl.client.CA.cert.filename将授权证书颁发机构的集合添加到 Traffic Server 配置。

    CONFIG proxy.config.ssl.client.CA.cert.path STRING /opt/ts/etc/ssl/certs/
    CONFIG proxy.config.ssl.client.CA.cert.filename STRING CAs.pem
    
  5. 运行traffic_ctl server restart命令重启 Traffic Server。

3)问题记录

问题1:客户端访问无法访问。

解决方式:

vim ssl_multicert.config

dest_ip=* ssl_cert_name=server.crt ssl_key_name=server.key

3、轮换 TLS 会话票证密钥

TLS 会话可以通过会话票证恢复,该票证使用会话票证密钥加密并存储在客户端上。为提高安全性,票证密钥可以定期轮换,例如每 24 小时轮换一次。票证密钥作为 48 字节块的反向队列存储在票证密钥文件中。

  1. 生成新的票证密钥并将其推送到票证密钥文件的开头。
  2. 可选:从票证密钥文件中删除最后一个票证密钥。
  3. 更新ssl_multicert.config以指示 SSL 配置已过时。
  4. 运行traffic_ctl config reload命令以应用新的票证密钥。

4、OCSP 装订

OCSP 装订是使用在线证书状态协议检查 SSL 证书吊销状态的另一种方法。

在最初的 OCSP 实施中,客户端直接向颁发证书的证书颁发机构 (CA) 请求证书的吊销状态。这可能会导致 CA 服务器上的大量负载,因为它们需要实时向给定证书的每个客户端提供响应。

启用 OCSP 装订指示 Traffic Server 检索并缓存所有已配置 SSL 证书的吊销状态,并在客户端请求状态时将它们呈现给客户端。Traffic Server 将自动查询 SSL 证书中指定的 OCSP 响应者以收集最新的吊销状态。Traffic Server 将缓存每个配置证书的结果。OCSP 响应者的位置取自签名证书的授权信息访问字段。例如:

Authority Information Access:
            OCSP - URI:http://ocsp.digicert.com
            CA Issuers - URI:http://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

如果 ssl_ocsp_name 参数在ssl_multicert.config. 考虑到使用预取的 OCSP 装订响应时,流量服务器不会刷新它们,应该在外部完成。这可以使用 openssl 完成:

$ openssl ocsp -issuer ca.crt -cert cert.crt -host ocsp.digicert.com:80 \
-header "Host=ocsp.digicert.com" -respout /var/cache/ocsp/cert.ocsp

可以使用 OpenSSL 客户端的 -status 选项测试对 OCSP 装订的支持:

$ openssl s_client -connect mozillalabs.com:443 -status
...
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
...

OCSP 装订 TLS 扩展的详细信息可以在RFC 6961

records.config要将 Traffic Server 配置为使用 OCSP 装订,请在文件中编辑以下变量:

5、拆分 DNS

拆分 DNS选项使您能够根据安全要求将 Traffic Server 配置为使用多个 DNS 服务器。例如,您可以将 Traffic Server 配置为使用一组 DNS 服务器来解析内部网络上的主机名,同时允许防火墙外的 DNS 服务器解析 Internet 上的主机。这样可以维护 Intranet 的安全性,同时继续提供对组织外部站点的直接访问。

要配置拆分 DNS:

  1. 指定基于目标域、目标主机或 URL 正则表达式执行 DNS 服务器选择的规则。这些规则位于splitdns.config

  2. 通过records.config中调整proxy.config.dns.splitDNS.enabled启用拆分 DNS选项。

    CONFIG proxy.config.dns.splitDNS.enabled INT 1
    
  3. 运行traffic_ctl config reload命令以应用配置更改。

6、生成证书

1 )创建服务器证书文件 server.key:

openssl genrsa -des3 -out server.key 2048

2)创建服务器证书的申请文件 server.csr

openssl req -new -key server.key -out server.csr

Country Name (2 letter code) [XX]:cn # 国家代号
State or Province Name (full name) []:ShanDong # 省
Locality Name (eg, city) [Default City]:QingDao # 市
Organization Name (eg, company) [Default Company Ltd]:test # 公司名
Organizational Unit Name (eg, section) []: # 可以不输入
Common Name (eg, your name or your server's hostname) []:
Email Address []:test@test.com # 邮箱
A challenge password []: # 可以不输入
An optional company name []: # 可以不输入

3)备份密钥文件

cp server.key server.key.back

4)去除文件口令

openssl rsa -in server.key.back -out server.key

5)生成自签名证书文件

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

================================================================================================================
因本人能力有限,当前整理一点当前自用的一些内容。如有不对的地方,欢迎大佬指正。
当前部分内容转自:https://docs.trafficserver.apache.org/en/9.1.x/preface/index.en.html

标签:简一,缓存,Server,Traffic,服务器,config,客户端
来源: https://www.cnblogs.com/ColoDu/p/16230167.html