在 OpenResty 中使用 CDN 的步骤
1. 配置 CDN 回源
修改 Host
头
在 OpenResty 的 Nginx 配置中,确保 CDN 回源时携带正确的 Host
头(通常是你的域名):
location / {
proxy_set_header Host $host;
proxy_pass http://your_backend_server;
}
允许 CDN IP 段访问
限制源站仅允许 CDN 节点的 IP 访问(防止用户直接绕过 CDN):
allow 192.0.2.0/24; # CDN 提供的 IP 段
deny all;
2. 缓存策略控制
设置 Cache-Control
头部
通过响应头告知 CDN 如何缓存资源:
location ~* \.(jpg|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
动态内容禁用缓存
对需要实时更新的接口或页面禁用 CDN 缓存:
location /api {
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
3. 获取真实用户 IP
配置 X-Forwarded-For
CDN 会将用户 IP 添加到 X-Forwarded-For
头,需在 OpenResty 中记录真实 IP:
set_real_ip_from 192.0.2.0/24; # CDN 的 IP 段
real_ip_header X-Forwarded-For;
real_ip_recursive on;
4. SSL/TLS 配置
CDN 到源站的 HTTPS
若 CDN 支持 HTTPS 回源,在 OpenResty 中配置 SSL 证书:
server {
listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# 其他配置...
}
5. 缓存刷新与预热
与 CDN API 集成
使用 OpenResty 的 Lua 脚本调用 CDN 提供商的 API,实现缓存刷新:
location /purge-cache {
content_by_lua_block {
local http = require "resty.http"
local httpc = http.new()
-- 调用 CDN 的 Purge API(示例)
local res, err = httpc:request_uri("https://cdn-provider.com/purge", {
method = "POST",
body = "url=/path/to/purge"
})
ngx.say("Purge result: ", res.body)
}
}
6. 验证配置
检查响应头
使用 curl -I
确认 Cache-Control
、X-Cache
(如 CDN 提供)等头部是否正确:
curl -I https://your-domain.com/static/image.jpg
注意事项:
- CDN 服务商差异:不同 CDN(如 Cloudflare、阿里云 CDN)可能有特殊配置,需参考其文档。
- 动态内容优化:对于 API 等动态请求,可通过 OpenResty 的 Lua 逻辑实现边缘计算(如限流、鉴权)。
- 监控与日志:在 OpenResty 中记录 CDN 节点的请求日志,便于分析缓存命中率。
通过以上步骤,OpenResty 即可高效配合 CDN 实现内容加速与负载均衡。