如何防止图片盗链:
图片盗链可以在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
如何启用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的选项:
如何启用PUSH方法:
PUSH方法是一种直接往TS中注入内容的方法,其为标准的HTTP协议。TS支持PUSH,
但是出于安全等的考虑,默认关闭了PUSH方法,下面是如何启用并测试的步骤。请
注意,如不严格限制对PUSH方法的使用,将会产生严重的安全隐患,请务必在acl
层面进行对PUSH发起端的控制。
测试,测试之前,应该配置好代理的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 ])
Server: ATS/2.1.7-unstable
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服务器就可以了:
修改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解析服务变成了快速的递归解析服务器。
修改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。
访问日志中可以看到类似的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来定制日志:
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
小问题
在Red Hat手工配置ts stable 3.0版本时,启动时通过ps aux | grep traf查看, 发现只有traffic_cop进程,其他两个进程没有启动成功?
redhat 5下,为什么无法直接在storage.config下使用物理设备如/dev/sdb?
/etc/udev/rules.d下,配置一个文件 99-trafficserver.rules,内容如下:
KERNEL=="sd[b-z]*", MODE="0660",OWNER="root", GROUP="root"
如何限制某些敏感信息的访问,防止信息泄漏,如http_ui接口只对公司网络开放:
如何确定文件是被ts缓存?
如何删除被ts缓存的特定文件?
如何确定Apache Traffic Server正常工作在全HASH的cluster模式下?
如何启用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_ 可以看到
TS与Squid有什么异同?