You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署EC2后Nginx无法展示自定义Web页面的配置修改

解决Nginx显示默认页面的Terraform Provisioning修改方案

针对你的问题,需要从执行时机、文件操作、权限验证这几个维度调整main.tf里的provisioning部分,具体修改点如下:

1. 确保remote-exec在user_data完全执行后运行

user_data是实例启动阶段异步执行的,remote-exec可能提前触发,导致Nginx还没安装完成就执行后续操作。要在remote-exec里添加等待逻辑:

provisioner "remote-exec" {
  inline = [
    # 等待cloud-init完成user_data执行
    "while [ ! -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done",
    # 后续拉取、构建、部署命令
  ]
}

2. 修正dist目录内容的移动命令

默认Nginx根目录/var/www/html里有自带的index.html,直接移动目录会导致dist作为子目录存在,而非替换根目录内容。要改用递归复制覆盖:

provisioner "remote-exec" {
  inline = [
    # 省略拉取代码、构建项目的步骤
    "sudo cp -r /your/project/path/simple-webapp/dist/* /var/www/html/",
    "sudo systemctl restart nginx"
  ]
}

注意:如果用mv命令,只会把整个dist目录放到/var/www/html下,访问路径会变成http://<公网IP>/dist/,这就是你看到默认页面的核心原因。

3. 在user_data中提前清理默认页面

可以在安装Nginx后直接删除默认的index.html,避免后续复制时遗漏覆盖:

resource "aws_instance" "web" {
  # 其他配置...
  user_data = <<-EOF
              #!/bin/bash
              apt update && apt install -y nginx
              sudo rm -f /var/www/html/index.html
              sudo systemctl enable --now nginx
              EOF
}

4. 验证构建步骤是否生成有效dist目录

在remote-exec中添加检查逻辑,确保项目构建成功并生成dist目录,避免空部署:

provisioner "remote-exec" {
  inline = [
    "cd /tmp/simple-webapp",
    # 假设是npm构建的前端项目,根据你的实际构建命令调整
    "npm install && npm run build",
    "if [ ! -d dist ]; then echo '构建失败:dist目录不存在' && exit 1; fi",
    "sudo cp -r dist/* /var/www/html/",
    "sudo systemctl restart nginx"
  ]
}

5. 确保所有操作使用sudo权限

/var/www/html属于root用户,普通用户无法直接写入,所以所有文件操作和Nginx重启命令必须加sudo,避免因权限不足导致部署失败。

内容的提问来源于stack exchange,提问作者Hyeri1ee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:41:24