Terraform配置S3静态网站无法自动加载index.html问题排查
问题分析与解决
你的aws_s3_bucket_website_configuration配置本身没问题,问题出在访问的URL类型错误。
- S3有两种不同的端点:
- REST API端点:就是你使用的裸Bucket域名(格式如
bucket-name.s3.amazonaws.com),这个端点默认用于桶的管理操作(比如列出对象),不会触发静态网站的索引文档规则,所以直接访问会返回<ListBucketResult>XML。 - 静态网站端点:格式为
bucket-name.s3-website-<region>.amazonaws.com(不同区域格式可能略有差异),这个端点是专门用于静态网站托管的,访问它的裸URL时会自动匹配你配置的index.html索引文档。
- REST API端点:就是你使用的裸Bucket域名(格式如
验证与解决步骤
- 获取正确的网站端点:
- 在AWS控制台的S3桶属性页,找到「静态网站托管」模块,里面会显示网站端点地址。
- 或者在Terraform中添加输出配置,直接获取网站端点:
执行output "s3_website_endpoint" { value = aws_s3_bucket.your_bucket_name.website_endpoint }terraform apply后就能拿到正确的访问地址。
- 确认其他配置无遗漏:
- 确保Bucket Policy已经允许公共访问
index.html及其他静态资源,示例Policy片段:{ "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } - 所有权控制已设置为「桶所有者优先」(2023年4月后默认是桶所有者强制,你已配置的话可忽略)。
- 确保Bucket Policy已经允许公共访问
内容的提问来源于stack exchange,提问作者Nick K9
相关产品推荐
相关产品推荐

