本站前端反响代理从nginx换到了caddy,使用还不是很熟练,这里备份一下配置文件。
# =============================================================================
# QuartLOG —— Caddyfile v2
# 后端:Quart / hypercorn 127.0.0.1:8000;站点根:/opt/blog
# 校验:caddy validate --adapter caddyfile --config caddy.conf
# 格式化:caddy fmt --overwrite caddy.conf
# 启动:./caddy start --adapter caddyfile --config caddy.conf
# 停止:./caddy stop
# 重启:./caddy reload --adapter caddyfile --config caddy.conf
# =============================================================================
# 裸域 → www(301 永久跳转)。
# Caddy 默认自动把 HTTP 308 跳转到 HTTPS,无需像 nginx 那样单独写 80 端口站点。
#quartlog.com {
# redir https://www.quartlog.com{uri} permanent
#}
www.quartlog.com {
# —— 证书策略二选一 ——
# 方式 A(推荐):留空,Caddy 通过 ACME 自动签发证书并自动续期。
# 前提:DNS 已解析到本机、80/443 对外开放(80 用于 HTTP-01 挑战)。
#
# 方式 B:沿用现有证书,则取消下一行注释;裸域站点块同样需要 tls 指向该证书:
tls /opt/caddy/keys/www.quartlog.com.pem /opt/caddy/keys/www.quartlog.com.key
# 压缩:仅 gzip level 5(对齐原 nginx gzip_comp_level 5)
# encode {
# gzip 5
# }
# 需要 zstd 时改成下面这段(zstd 优先于 gzip 协商):
encode {
zstd better
gzip 6
}
# 请求体上限 6MB:对齐后端文章图 5MB,给 multipart 封装留余量;超限返回 413
request_body {
max_size 6MB
}
root * /opt/blog
# 安全响应头:站点级增量下发,静态与后端响应都会带上
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()"
Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-src 'none'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'"
# Caddy 默认只回 Server: Caddy(不含版本号);如需彻底删除该头可取消下一行注释
-Server
}
# 访问日志:JSON 结构化,按大小滚动;静态资源跳过记录
log {
output file /opt/caddy/logs/access.log {
roll_size 100mb
roll_keep 5
}
format json
}
@static path /static/* /favicon.ico /robots.txt /sitemap.xml
log_skip @static
# 拦截隐藏文件与后端不对外目录,返回 404
@hidden path /.git/** /.hg/** /.svn/** /.env* /.idea/** /.vscode/** /instance/** /tools/** /logs/** /__pycache__/** /requirements/**
handle @hidden {
respond 404
}
# robots.txt / sitemap.xml 直出,1 天缓存
@rootfile path /robots.txt /sitemap.xml
handle @rootfile {
header Cache-Control "public, max-age=86400"
file_server
}
# favicon.ico 直出,30 天缓存
handle /favicon.ico {
root * /opt/blog/static
header Cache-Control "public, max-age=2592000"
file_server
}
# /static/* 直出,7 天缓存
handle /static/* {
header Cache-Control "public, max-age=604800"
file_server
}
# 其余请求反代到 Quart / hypercorn
# Caddy 自动维护上游连接池;X-Forwarded-For / X-Forwarded-Proto / X-Forwarded-Host 自动设置
handle {
reverse_proxy 127.0.0.1:8000 {
transport http {
dial_timeout 2s
response_header_timeout 30s
read_timeout 30s
write_timeout 15s
keepalive 2m
}
}
}
}
评论(0)
还没有评论,来抢沙发吧~