第一次用TS?
- 如何单机节点搭建reverse proxy模式的服务?
- 修改records.config文件
- CONFIG proxy.config.cluster.ethernet_interface STRING eth0, 根据机器的配置将eth0修改为实际的网络接口(后续版本或RPM包中已经改为lo, 如不用到cluster模式,将不再需要单独再改)。
- CONFIG proxy.config.http.server_port INT 8080,根据自己环境将 8080改为80或3128等端口。
- CONFIG proxy.config.url_remap.pristine_host_hdr INT 1,值改 为0,这样可以释放对外域名的自由度。–这个修改视个人需要。
- 修改storage.config文件
- ts可以使用文件或者raw disk作为cache storage,具体操作请参见 storage.config文件中的注释
- 修改remap.config文件
- 根据需求在remap.config文件中添加rule,具体操作请参见remap.config 文件的注释
- 通过命令 service trafficserver start 或 trafficserver start 启动ts。 ps aux | grep traffic 如果启动成功应该显示三个进程 traffic_cop,traffic_manager和traffic_server
- 修改records.config文件
- 如何搭建TS的正向代理服务器?
- 默认安装服务器后,执行:
- traffic_line -s proxy.config.reverse_proxy.enabled -v 0
- traffic_line -s proxy.config.url_remap.remap_required -v 0
- 执行配置reload: traffic_line -x 即可将TS从反向代理服务器改为正向代理服务器。
- 默认安装服务器后,执行:
- 如何搭建full clustering模式的ts集群?
- 在搭建集群前,首先需要确认每个节点环境相同:
- 安装的系统是相同的:
- 发行版本相同,如都是RHEL 5.4
- 内核版本相同,如都是2.6.18-194.8.1.el5
- ARCH相同,如都是x86_64
- 而且使用的ts版本是相同的,如用同一个rpm包安装
- 安装的系统是相同的:
- 针对每个节点修改配置文件records.config,remap.config,storage.config, 除了将proxy.local.custer.type值取3选择full clustering模式外,其他操作 与”单机节点搭建reverse proxy模式的ts”操作是相同的
- 通过命令 trafficserver start 启动每个节点上的ts
- 在搭建集群前,首先需要确认每个节点环境相同:
- ts常用操作命令
- 启动|停止|重启动ts:trafficserver {start|stop|restart}
- 清空cache: traffic_server -Cclear ( 该命令在ts停止时执行 )
- 查看cache是否清空: traffic_line -r proxy.process.cache.bytes_used
- 查看配置的cache大小: traffic_line -r proxy.process.cache.bytes_total
- 查看集群中的节点数: traffic_line -r proxy.process.cluster.nodes
安全与认证方面
- 为什么TS不支持用户认证?
- Apache Traffic Server在雅虎贡献给Apache之前,是商业软件,因此其认证模块 涉及了很多相关的许可与知识产权,这些属于无法在短期内解决的问题,因此其用户认 证模块被完全放弃。
- 开发团队会在适当的时候重建认证模块
配置与使用
- 如何防止图片盗链:
- 图片盗链可以在remap.config中使用map_with_referer的方式来控制,默认的配置 文件中有关于map_with_referer的详细说明,并配有例子。我们常用的正则匹配格式 为:http://pics.taobaocdn.com/bao/album/wp/pic_fobbiden.png ~* ^http://[^/]+.(baidu|taobao|alibaba|alipay|google|search.msn).com(.cn|)/
代表的意义为:如来源请求不是从后面这些网站来的,则给它返回一个禁止使用的图片。
- 需要全局启用refer检查: traffic_line -s proxy.config.http.referer_filter -v 1
- 如何在remap中使用基于IP地址的ACL控制?
- TBD
- 图片盗链可以在remap.config中使用map_with_referer的方式来控制,默认的配置 文件中有关于map_with_referer的详细说明,并配有例子。我们常用的正则匹配格式 为:http://pics.taobaocdn.com/bao/album/wp/pic_fobbiden.png ~* ^http://[^/]+.(baidu|taobao|alibaba|alipay|google|search.msn).com(.cn|)/
功能与特性方面
- Apache Traffic Server支持Socket5代理吗?
- Apache Traffic Server设计有支持Socket4和Socket5代理的模块,并且能够在 代理中使用本地的http缓存服务。
- 目前功能并没有得到任何测试,代码没人关心。如需要可需要做点工作才好, Apache Traffic Server是一个极好的Socket代理服务器料。
- FTP代理能支持吗?
- Apache Traffic Server目前不支持FTP代理。
- 老代码中有FTP转为HTTP服务的设计,可以用HTTP协议反向代理FTP内容。
- Apache Traffic Server能对流媒体作cache吗?
- 目前不能。
- Inktomi设计TrafficServer之初,系统是为能够同时支持流媒体和HTTP服务而设计 的,产品也完整的实现了Quicktime、Real、MMS为主的流媒体协议,但是由于这些 协议支持的相关的代码都需要其他公司的商业授权,无法开源,同时也因为代码都是10年 前的,支持的协议版本已经完全赶不上时代了,因此也在开源的时候整个模块砍掉了。
- 目前核心代码仍然能够支持流媒体协议,即Apache Traffic Server的核心系统层, 具备同时支撑2种主要协议(HTTP协议和MIXT协议,MIXT协议即为流媒体的抽象协议) 的能力。因此重建流媒体也是有可能的,欢迎有志之士参与。
- 如何启用http_ui:
- 修改remap.config,增加如下配置:(使用localhost是因为大多数情况下, localhost不会成为正向和反向代理服务器的对外域名)
- map http://localhost/cache-internal/ http://{cache-internal}
- map http://localhost/cache/ http://{cache}
- map http://localhost/stat/ http://{stat}
- map http://localhost/test/ http://{test}
- map http://localhost/hostdb/ http://{hostdb}
- map http://localhost/net/ http://{net}
- map http://localhost/http/ http://{http}
- 执行如下命令,启用http_ui的选项:
- traffic_line -s proxy.config.http_ui_enabled -v 3
- traffic_line -s proxy.config.http.enable_http_info -v 1
- 让配置生效:
- traffic_line -x
- 测试:
- echo -e “GET http://localhost/stat/ HTTP/1.0\r\n\r\n” | nc -i 1 localhost 8080
- 修改remap.config,增加如下配置:(使用localhost是因为大多数情况下, localhost不会成为正向和反向代理服务器的对外域名)
- 如何启用PUSH方法:
- PUSH方法是一种直接往TS中注入内容的方法,其为标准的HTTP协议。TS支持PUSH,
- 但是出于安全等的考虑,默认关闭了PUSH方法,下面是如何启用并测试的步骤。请
- 注意,如不严格限制对PUSH方法的使用,将会产生严重的安全隐患,请务必在acl
- 层面进行对PUSH发起端的控制。
- 启用PUSH方法:
- traffic_line -s proxy.config.http.push_method_enabled -v 1
- 修改默认的quick_filter,允许PUSH协议。quick_filter作为一个超级ACL,具有 很高的控制级别,所有其他控制都在其之后实施,因此必须放开才能够将放开PUSH方法。 去掉对PUSH的全局限制:
- =traffic_line -s proxy.config.http.quick_filter.mask -v 130=
- 让配置生效:
- =traffic_line -x=
- 测试,测试之前,应该配置好代理的map等其他功能,确保正确的访问没有问题,然后再测 试PUSH功能,以利于分析问题。TS代码中的tools目录下,有个push.pl可以用来 向TS 服务器push文件,也可以使用类似如下telnet方法测试:
- zym6400 trafficserver # telnet localhost 80
- Trying 127.0.0.1…
- Connected to localhost.localdomain.
- Escape character is ‘^]’.
- PUSH http://cdn.zymlinux.net/trafficserver/2 HTTP/1.0
- Content-length: 217
- HTTP/1.0 200 OK
- Content-type: text/plain
- Content-length: 1
- Date: Sun, 13 Mar 2011 02:20:26 GMT
- Last-Modified: Sun, 13 Mar 2011 02:20:26 GMT
- Cache-Control: max-age=3600
- Expires: Sun, 13 Mar 2011 03:20:26 GMT
- 1
- HTTP/1.0 201 Created
- Date: Sun, 13 Mar 2011 03:10:01 GMT
- Via: http/1.1 zymtest1.corp.aliyk.com (ApacheTrafficServer/2.1.7-unstable [c s f ])
- Content-Length: 0
- Connection closed by foreign host.
- zym6400 trafficserver # telnet localhost 80
- Trying 127.0.0.1…
- Connected to localhost.localdomain.
- Escape character is ‘^]’.
- GET http://cdn.zymlinux.net/trafficserver/2 HTTP/1.0
- HTTP/1.0 200 OK
- Content-type: text/plain
- Content-length: 1
- Date: Sun, 13 Mar 2011 02:20:26 GMT
- Last-Modified: Sun, 13 Mar 2011 02:20:26 GMT
- Cache-Control: max-age=3600
- Expires: Sun, 13 Mar 2011 03:20:26 GMT
- Age: 3001
- Via: http/1.0 zymtest1.corp.aliyk.com (ApacheTrafficServer/2.1.7-unstable [cHs f ])
- Server: ATS/2.1.7-unstable
- 1Connection closed by foreign host.
- SplitDNS:
- SplitDNS 是一个很好的工具,其本意是根据hostname不同,对dns解析服务
- 分情况处理。其基本原理是设置个hostname匹配规则,指定相应的dns server。
- 使用这个方式,配合dns server的一些设置,将可以实现很多有意思的效果:
- 有些公司有所谓的内外网的网络结构,以对一些关键的服务进行区分。TS可以配合这种模式, 使用SplitDNS完成源服务器的配置,更好的利用这种环境。这样的环境中,服务域名被外网 DNS服务器解析到TS服务器,被内网DNS服务器解析到源服务器,这样外部用户将可以用TS的 高效cache,内部开发维护人员可以屏蔽cache,直接使用源服务器。这样在TS作网站加速时, 设置TS使用内网DNS服务器就可以了:
- 假设我们有一个域名www.example.com,我们对外解析服务是通过dns服务器1.2.3.1-3 完成的。域名解析为1.2.4.1。1.2.4.1即为我们的TS服务器。
- 而假设我们源服务器为1.2.5.1,并且也需要用www.example.com来访问,则
- 我们需要remap: map http://www.example.com/ http://www.example.com
- 则我们需要在TS上对www.example.com的IP地址进行配置,需要引导TS找到真正的源 服务器。假设我们有2个内部dns服务器,如1.2.3.10-11,作为开发测试等内部服务器的 dns解析服务器,其解析www.example.com到1.2.5.1,www.example.com的源服务器。
- 则我们可以在TS上启用SplitDNS,让TS使用1.2.3.10-11来解析www.example.com。
- 配置如下:
- traffic_line -s proxy.config.dns.splitDNS.enabled -v 1
- 修改splitdns.config,添加如下内容:
dest_domain=www.example.com named="1.2.3.10;1.2.3.11"
- 精确定义相关的dns服务器设置,避免经过本地的dns resolver的cache/过滤。dns的cache后,其dns条目的ttl等,都会受到本地cache的影响。而TS的内部有hostdb 用来作为dns缓存,其最佳处理是能够直接接受授权服务器的dns解析,这样能够屏蔽一些 问题,并能够比较好的控制ttl等。使用SplitDNS,可以将example.com的解析服务器 指向到其授权域服务器192.0.34.43与193.0.0.236。这种用法的效果就是把TS自身的普通 dns解析服务变成了快速的递归解析服务器。
- 配置如下:
- =traffic_line -s proxy.config.dns.splitDNS.enabled -v 1=
- 修改splitdns.config,添加如下内容:dest_domain=example.com named=”192.0.34.43;193.0.0.236″
dest_domain=google.com named=”216.239.32.10;216.239.34.10;216.239.36.10;216.239.38.10″
- 配置如下:
- prefetch用法
- PreFetch是思想是,在特定用户访问特定网站的时候,解析其html文档,提取其
- 中的image js ccs的资源文件,并立即回源fetch。一般来讲,这个过程应先
- 于用户端发起连接,所以定名prefetch。
- 使用场景:
- 内部访问url后,然TS将网站所有的url进行重新提前发布。
- 可以编造一个特意的URL,给ts作为prefetch的目标,成为类似cache推送的功能。
- 使用限制:
- prefetch只能对发起端ip进行选择,无法同时控制目的网站,因此要控制好你的child ip。
- 只能对不进行encode的html文件进行解析,因此如压缩的网页就不能解析了。
- 启用方法:
- TS目前的发布里,并没有将默认的prefetch.config带上,因此你需要从TS的源码 里找一个这个文件,并放在TS的配置文件目录里。
- 修改prefetch.config,设定你的prefetch_children,即发起端的ip地址。
- 设置设置records.config中 proxy.config.prefetch.prefetch_enabled = 1 (这个应该是新建,建议用traffic_line -s操作)
- 重启服务
- debug方法:
- prefetch代码使用的debug regex可以用:Prefetch.*
- 访问日志中可以看到类似的127.0.0.1发起的连接:
- 1307196090.325 516 10.62.241.5 TCP_MISS/200 4851 GET http://zymlinux.net/ – DIRECT/zymlinux.net text/html –
- 1307196090.356 24 127.0.0.1 TCP_MISS/200 617 GET http://zymlinux.net/icons/text.gif – DIRECT/zymlinux.net image/gif –
- 1307196090.378 26 127.0.0.1 TCP_MISS/200 633 GET http://zymlinux.net/icons/unknown.gif – DIRECT/zymlinux.net image/gif –
- 1307196090.382 61 127.0.0.1 TCP_MISS/200 536 GET http://zymlinux.net/icons/blank.gif – DIRECT/zymlinux.net image/gif –
- 1307196090.407 66 127.0.0.1 TCP_MISS/200 613 GET http://zymlinux.net/icons/folder.gif – DIRECT/zymlinux.net image/gif –
- 如何使用logs_xml.config来定制日志:
- 标准的squid日志可以采用直接修改records.config的方式来启用和停用,而如果 需要定制日志格式,则需要启用custom log:
- traffic_line -s proxy.config.log.custom_logs_enabled -v 1
- logs_xml.config的格式在文件中有例子,并且在admin guide中有详细的说明, 我们以线上需要记录非淘宝的所有请求为例:
- <LogFormat>
- <Name = “taobao”/>
- <Format = “combined [%<cqtn>] %<chi> %<phi> 81 %<ttms> \”%<{Referer}cqh>\” \”%<cqtx>\” %<pssc> %<cqhl> %<psql> %<psct> %<crc> \”%<{User-Agent}cqh>\”” />
- </LogFormat>
- <LogFilter>
- <Name = “not_taobaocdn.com”/>
- <Condition = “shn CASE_INSENSITIVE_CONTAIN taobaocdn.com”/>
- <Action = “REJECT”/>
- </LogFilter>
- <LogFilter>
- <Name = “not_taobao.com”/>
- <Condition = “shn CASE_INSENSITIVE_CONTAIN taobao.com”/>
- <Action = “REJECT”/>
- </LogFilter>
- <LogObject>
- <Format = “taobao”/>
- <Filename = “tb_squid”/>
- <Filters = “not_taobaocdn.com,not_taobao.com”/>
- <CollationHosts = “console1.cn63:8085”/>
- </LogObject>
- 我们定义了一个自定义的日志格式taobao
- 我们定义了2个反的过滤条件
- 定义了一个日志收集方式:将满足非taobao.com非taobaocdn.com的访问日志记录 到远程机器console1.cn63上的tb_squid.log中
- 标准的squid日志可以采用直接修改records.config的方式来启用和停用,而如果 需要定制日志格式,则需要启用custom log:
- 小问题
- 在Red Hat手工配置ts stable 3.0版本时,启动时通过ps aux | grep traf查看, 发现只有traffic_cop进程,其他两个进程没有启动成功?
- 这个问题因版本而异,对于ts stable 3.0版本,需要在records.config中正确 指定网络接口,即修改proxy.config.cluster.ethernet_interface为自己机 器配置的网络接口。开发版不存在这个问题,配置时不需要正确指定网络接口。
- redhat 5下,为什么无法直接在storage.config下使用物理设备如/dev/sdb?
- 使用ls -l /dev/sdb查看相应的权限位,可以看到brw——- root root,而 trafffic_server进程是以nobody的用户执行的,其附加用户组中有root,可见 以trafficserver权限不能够读写/dev/sdb。解决方法可以用 =chmod g+rw /dev/sdb= 赋予root组以读写权限即可。
- /etc/udev/rules.d下,配置一个文件 99-trafficserver.rules,内容如下:KERNEL==”sd[b-z]*”, MODE=”0660″,OWNER=”root”, GROUP=”root”
- 如何限制某些敏感信息的访问,防止信息泄漏,如http_ui接口只对公司网络开放:
- 在remap.config中,相应的map规则后面追加类似内容 @action=allow @src_ip=10.13.43.23 @method=PUT @method=GET, 则只有10.13.43.23地址发送过来的PUT/GET类型的http请求,请求这个规则中的内 容,才会允许,其他任何例外请求,都会返回一个类似”You are not allowed to access the document.“内容的403禁止访问错误。
- 完整例子如:map http://cdn.zymlinux.net/stat/ http://{stat} @action=allow @src_ip=10.13.43.23 @method=PUT @method=GET
- 详细参考见 remap.config中的注释说明
- 如何确定文件是被ts缓存?
- 网络分析:
- 使用两台机子ts1和ts2。在ts1上配置apache,并在/var/www.html/上编 辑得到几个文件如b.html,test.jpg等等。之后使用tcpdump监听ts1 80 端口的tcp通讯。在ts2配置ts,清空cache并以反向代理模式启动ts,配置 remap.config文件,添加规则“map ts1_url ts1_url” (ts1_url代表ts1提供的外部访问的链接)。
- 配置客户端,编辑hosts文件,添加一条记录使得对ts1的访问转向ts2,并保 证浏览器不使用缓存。
- 使用客户端浏览器访问ts1上的文件b.html两次,通过wireshark分析tcpdump 从ts1上抓的包。如果ts2只从ts1上取了一次b.html,则说明文件被ts2缓存。
- 分析ts的返回密码:
- 配置TS让返回的头里带via:traffic_line -s proxy.config.http.insert_response_via_str -v 1
- 解密
- 返回via密码中含有cH即为缓存命中。
- 网络分析:
- 如何删除被ts缓存的特定文件?
- trafficserver的文档中接受删除指定文档时在其提供的web界面接口中进行的。 当然也可以使用curl工具来发送PURGE请求来进行删除
- 如何确定Apache Traffic Server正常工作在全HASH的cluster模式下?
- netstat 看网络连接:netstat -lant | grep 8086,本机应有8086端口处于 监听状态,同时如有其他cluster 成员,会有成员连接到本机的8086或本机连接到 成员8086端口的tcp连接已经建立。
- 显示成员数量: traffic_line -r proxy.process.cluster.nodes
- 如何启用debug模式?
- 修改records.config的如下2行,可以启用ts的debug模式用以调试模块:
- CONFIG proxy.config.diags.debug.enabled INT 0
- CONFIG proxy.config.diags.debug.tags STRING cache.*|cluster.*|chan.*
如改为:
-
CONFIG proxy.config.diags.debug.enabled INT 1
-
CONFIG proxy.config.diags.debug.tags STRING dns*
即可调试dns相关模块的情况。
- 有多少模块?很多,在源代码里执行: grep -ioR ‘Debug([a-zA-Z-“]*\,’ * | awk -F ( ‘{print $2}’ | sed ‘s/”//g’ | sed ‘s/,//’ | sort -u_ 可以看到
- 修改records.config的如下2行,可以启用ts的debug模式用以调试模块:
- TS与Squid有什么异同?
- TS是面向ISP的企业级cache/proxy系统,而squid作为一个全功能的proxy/cache 系统,2者在定位上有不同,因此产生很大的分歧:
- TS核心功能将趋向于简化,如目前已经砍掉了认证模块。Squid趋向于功能越 来越多、配置越来越复杂。
- TS的开发开始就为大规模运维考虑,因此有很多高效运维方面的设计,如能够 使用traffic_shell来像管理交换机一样管理ts等。squid趋向于完善自己 的cache功能,在营运方面并没有投入太多。
- https://cwiki.apache.org/TS/squidconfigtranslation.html 是官方的squid到ts的配置转换文档。
- TS是面向ISP的企业级cache/proxy系统,而squid作为一个全功能的proxy/cache 系统,2者在定位上有不同,因此产生很大的分歧:
- 在Red Hat手工配置ts stable 3.0版本时,启动时通过ps aux | grep traf查看, 发现只有traffic_cop进程,其他两个进程没有启动成功?
原创文章,作者:赛福,如若转载,请注明出处:https://www.safecdn.cn/636.html
本站不销售、不代购、不提供任何支持,仅分享网络信息,请自行辨别,请遵纪守法、文明上网。