
secoresearch/varnishVarnish Docker镜像是基于Varnish缓存服务器的容器化部署包。Varnish是一款高性能的HTTP反向代理缓存服务器,通过缓存频繁访问的Web内容,显著提升内容交付速度,降低后端服务器负载。
主要用途:
如需基于源码自定义构建Varnish镜像,执行以下命令:
bashdocker build -t varnish .
说明:默认情况下可直接使用官方或预构建的Varnish镜像,无需手动构建。
挂载本地自定义VCL文件(default.vcl)运行容器:
bashdocker run -it --rm \ -u "$(id -u)" \ # 指定运行用户ID,避免权限问题 -p 8080:8080 \ # 端口映射(宿主机端口:容器内端口,容器内默认HTTP端口通过VARNISH_HTTP_PORT配置) -v /path/to/default.vcl:/etc/varnish/default.vcl \ # 挂载自定义VCL文件 -e VARNISH_MEM="2G" \ # 配置缓存内存大小为2G varnish
未提供自定义VCL时,容器自动生成默认配置,通过环境变量控制缓存策略:
bashdocker run -it --rm \ -p 80:80 \ # 映射默认HTTP端口(容器内默认80,通过VARNISH_HTTP_PORT修改) -e VARNISH_MEM="1G" \ # 缓存内存1G -e VARNISH_DEFAULT_TTL="3600s" \ # 默认缓存时间1小时 -e VARNISH_BACKEND_IP="192.168.1.100" \ # 后端服务IP -e VARNISH_BACKEND_PORT="8080" \ # 后端服务端口 -e VARNISH_CACHE_COOKIES=1 \ # 缓存含Cookie的请求,并将Cookie纳入哈希 varnish
创建docker-compose.yml文件,配置Varnish服务:
yamlversion: '3' services: varnish: image: varnish ports: - "80:80" # 宿主机80端口映射到容器HTTP端口 volumes: - ./default.vcl:/etc/varnish/default.vcl # 挂载自定义VCL(可选) environment: - VARNISH_MEM="2G" # 缓存内存大小 - VARNISH_HTTP_PORT="80" # 容器内HTTP服务端口 - VARNISH_DEFAULT_TTL="3600s" # 默认TTL(仅默认VCL生效) - VARNISH_BACKEND_IP="backend-service" # 后端服务名称/IP(需与后端服务网络互通) - VARNISH_BACKEND_PORT="8080" # 后端服务端口(仅默认VCL生效) depends_on: - backend-service # 依赖后端服务(需确保后端服务先启动) backend-service: image: your-backend-image # 后端应用镜像 ports: - "8080:8080"
以下环境变量对自定义VCL和默认VCL均生效:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
FILE_DEFAULT_VCL | /etc/varnish/default.vcl | Varnish配置文件路径,自定义VCL需挂载到此路径 |
VARNISH_MEM | 1G | 缓存内存大小,支持单位(如512M、2G) |
VARNISH_VSL_MASK_HASH | 空 | 非空时启用哈希日志记录(添加-p vsl_mask=+Hash参数启动varnishd) |
VARNISH_HTTP_PORT | 80 | 容器内Varnish HTTP服务监听端口 |
当未挂载自定义default.vcl时,容器通过以下环境变量生成默认VCL配置,变量未设置则不生效:
| 环境变量 | 说明 |
|---|---|
VARNISH_CACHE_COOKIES | 缓存含Cookie的请求,并将Cookie值纳入哈希(影响缓存键唯一性) |
VARNISH_IGNORE_COOKIES | 缓存含Cookie的请求,但忽略Cookie值(所有含Cookie请求共享同一缓存) |
VARNISH_CACHE_AUTH | 缓存含Authorization头的请求,并将Authorization值纳入哈希 |
VARNISH_IGNORE_AUTH | 缓存含Authorization头的请求,但忽略Authorization值 |
VARNISH_DEFAULT_TTL | 对象默认缓存时间(如3600s) |
VARNISH_BACKEND_IP | 后端服务IP地址(必填,默认VCL需指定后端) |
VARNISH_BACKEND_PORT | 后端服务端口(默认80) |
default.vcl后,5.2节中的默认VCL生成环境变量均不生效,需在VCL文件中手动定义缓存策略。VARNISH_CACHE_AUTH会缓存含Authorization头的请求,可能导致后端已失效的Authorization仍可访问缓存内容。VARNISH_IGNORE_AUTH会忽略Authorization值,可能导致不同用户共享同一缓存内容,存在权限安全风险。varnishd -C -f default.vcl本地校验。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务