varnish,转http://www.ttlsa.com/nginx/varnish-4-configure-file/

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

# 使用varnish版本4的格式.

;

# 加载后端轮询模块

;

#######################健康检查策略区域###########################

# 名为www_probe的健康检查策略

{

=

# 健康检查url为/html/test.html 协议为http1.1

# 访问的域名为www.xxxxx.com

# 检查完关闭连接

#其他参数 如 超时时间 检查间隔 等 均使用默认

}

##################################################################

#######################配置后端区域################################

{

;

;

# 使用名为www_probe的健康检查策略

}

{

;

;

# 使用名为www_probe的健康检查策略

}

#默认后端

{

;

;

}

###################################################################

# 配置后端集群事件

{

# 后端集群有4种模式 random, round-robin, fallback, hash

# random 随机

# round-robin 轮询

# fallback 后备

# hash 固定后端 根据url(req.http.url) 或 用户cookie(req.http.cookie) 或 用户session(req.http.sticky)(这个还有其他要配合)

# 把backend_16 和 backend_17配置为轮询集群 取名为www_round_robin

;

;

;

# 把backend_16 和 backend_17配置为随机选择集群 取名为www_random

;

# 设置backend_16后端的权重为10

# 设置backend_17后端的权重为5

# 把backend_16 和 backend_17配置为固定后端集群 取名为www_hash 在recv调用时还需要添加东西 看recv例子

;

# 设置backend_16后端的权重为1

# 设置backend_17后端的权重为1

}

#定义允许清理缓存的IP

{

# For now, I'll only allow purges coming from localhost

;

;

}

# 请求入口 这里一般用作路由处理 判断是否读取缓存 和 指定该请求使用哪个后端

{

##############################指定后端区域###########################

# 域名为 www.xxxxx.com 的请求 指定使用名为www_round_robin的后端集群 在集群名后加上 .backend() 如只使用单独后端 直接写后端名字即可 如 = backend_16;

{

;

}

# 使用固定后端集群例子 使用名为www_hash的集群

{

# 根据用户的cookie来分配固定后端 可以指定其他分配规则

}

# 其他将使用default默认后端

#####################################################################

# 把真实客户端IP传递给后端服务器 后端服务器日志使用X-Forwarded-For来接收

{

{

;

{

;

}

}

# 匹配清理缓存的请求

{

# 如果发起请求的客户端IP 不是在acl purge里面定义的 就拒绝

{

;

}

# 是的话就执行清理

;

}

# 如果不是正常请求 就直接穿透没商量

&&

&&

&&

&&

&&

&&

&&

{

/* Non-RFC2616 or CONNECT which is weird. */

;

}

# 如果不是GET和HEAD就跳到pass 再确定是缓存还是穿透

{

;

}

# 缓存通过上面所有判断的请求 (只剩下GET和HEAD了)

;

}

# pass事件

{

# 有fetch,synth or restart 3种模式. fetch模式下 全部都不会缓存

;

}

# hash事件(缓存事件)

{

# 根据以下特征来判断请求的唯一性 并根据此特征来缓存请求的内容 特征为&关系

# 1. 请求的url

# 2. 请求的servername 如没有 就记录请求的服务器IP地址

# 3. 请求的cookie

;

{

;

{

;

}

# 返回lookup , lookup不是一个事件(就是 并非指跳去sub vcl_lookup) 他是一个操作 他会检查有没有缓存 如没有 就会创建缓存

;

}

# 缓存命中事件 在lookup操作后自动调用 官网文档说 如没必要 一般不需要修改

{

# 可以在这里添加判断事件(if) 可以返回 deliver restart synth 3个事件

# deliver 表示把缓存内容直接返回给用户

# restart 重新启动请求 不建议使用 超过重试次数会报错

# synth 返回状态码 和原因 语法:return(synth(status code,reason))

# 这里没有判断 所有缓存命中直接返回给用户

;

}

# 缓存不命中事件 在lookup操作后自动调用 官网文档说 如没必要 一般不需要修改

{

# 此事件中 会默认给http请求加一个 X-Varnish 的header头 提示: nginx可以根据此header来判断是否来自varnish的请求(就不用起2个端口了)

# 要取消此header头 只需要在这里添加 unset bereq.http.x-varnish; 即可

# 这里所有不命中的缓存都去后端拿 没有其他操作 fetch表示从后端服务器拿取请求内容

;

}

# 返回给用户的前一个事件 通常用于添加或删除header头

{

# 例子

# set resp.status 用来设置返回状态 如 set resp.status = 404;

# obj.hits 会返回缓存命中次数 用于判断或赋值给header头

# req.restarts 会返回该请求经历restart事件次数 用户判断或赋值给header头

# 根据判断缓存时间来设置xxxxx-Cache header头

{

;

{

;

}

#取消显示php框架版本的header头

;

#取消显示nginx版本、Via(来自varnish)等header头 为了安全

;

;

;

;

;

#显示请求经历restarts事件的次数

;

#显示该资源缓存的时间 单位秒

;

#显示该资源命中的次数

;

#取消显示Age 为了不和CDN冲突

;

#返回给用户

;

}

#处理对后端返回结果的事件(设置缓存、移除cookie信息、设置header头等) 在fetch事件后自动调用

{

#后端返回如下错误状态码 则不缓存

{

;

}

#如请求php或jsp 则不缓存

{

;

#php和jsp以外的请求

{

#如请求html 则缓存5分钟

{

;

;

#其他缓存1小时 如css js等

{

;

;

}

}

#开启grace模式 表示当后端全挂掉后 即使缓存资源已过期(超过缓存时间) 也会把该资源返回给用户 资源最大有效时间为6小时

;

#返回给用户

;

}

#返回给用户前的事件 可以在这里自定义输出给用户的内容

{

}