如何限制Lightsail CDN源站?仅允许CDN访问静态IP
阻止Lightsail WordPress实例静态IP直接访问,仅允许CDN流量
方案1:通过Lightsail防火墙限制来源IP
CloudFront会使用固定IP段转发请求,你可以在Lightsail实例防火墙中仅允许这些IP访问80/443端口:
- 登录Lightsail控制台,进入目标WordPress实例的联网标签
- 删除现有允许所有IP访问80(HTTP)和443(HTTPS)的规则
- 添加新规则:
- 端口范围:
80,来源:CloudFront官方发布的IPv4/IPv6地址段(从AWS IP范围文档提取CloudFront对应条目即可) - 端口范围:
443,来源:同上
- 端口范围:
- 注意:AWS会定期更新CloudFront IP段,建议定期检查更新,或用脚本自动同步规则
方案2:Web服务器验证CDN专属请求头部
CloudFront转发到源站的请求会携带专属头部(如X-Amz-Cf-Id),直接访问静态IP的请求不会包含这些头部,可通过Web服务器配置拦截无头部的请求:
Nginx配置(Lightsail WordPress默认多为Nginx)
编辑站点配置文件(如/etc/nginx/sites-available/wordpress),在server块内添加:
if ($http_x_amz_cf_id = "") { return 403; }
保存后重启Nginx:sudo systemctl restart nginx
Apache配置
在WordPress根目录的.htaccess文件或虚拟主机配置中添加:
RewriteEngine On RewriteCond %{HTTP:X-Amz-Cf-Id} ^$ RewriteRule ^ - [F]
方案3:禁止IP直接访问,仅允许域名请求
在Web服务器中配置默认主机返回403,仅处理你的域名请求:
Nginx示例
# 拦截所有IP直接访问的请求 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 403; } server { listen 443 ssl default_server; listen [::]:443 ssl default_server; server_name _; ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/cert.key; return 403; } # 正常处理域名请求的server块 server { listen 80; listen [::]:80; server_name your-domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name your-domain.com; # 保留原有的WordPress SSL及站点配置 }
重启Nginx生效:sudo systemctl restart nginx
最佳实践
建议组合使用方案1+方案2,通过防火墙拦截非CDN IP,再通过头部验证确保请求确实来自CloudFront,实现双重防护。
内容的提问来源于stack exchange,提问作者Adarsh Mallandur
相关产品推荐
相关产品推荐

