Nginx部署前端项目详细指南

650 阅读2分钟

Nginx部署前端项目详细指南

一、前置准备

1. 构建前端项目

首先需要将前端项目编译为生产环境的静态资源:

# React项目
npm run build
# 或
yarn build

# Vue项目
npm run build
# 或
yarn build

构建完成后,项目根目录会生成 build(React)或 dist(Vue)目录,包含所有需要部署的静态文件。

2. 安装Nginx

MacOS(使用Homebrew)

brew install nginx
brew services start nginx

Linux(Ubuntu/Debian)

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Linux(CentOS)

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Windows: 从Nginx官网下载压缩包,解压后运行 nginx.exe

二、配置Nginx

1. 找到配置文件位置

  • MacOS

    • Intel芯片:/usr/local/etc/nginx/nginx.conf
    • Apple Silicon:/opt/homebrew/etc/nginx/nginx.conf
  • Linux

    • 主配置文件:/etc/nginx/nginx.conf
    • 站点配置:/etc/nginx/sites-available/
  • Windows

    • Nginx安装目录下的 conf/nginx.conf

2. 备份原始配置

# 以MacOS为例
sudo cp /opt/homebrew/etc/nginx/nginx.conf /opt/homebrew/etc/nginx/nginx.conf.bak

3. 基础配置示例

编辑nginx.conf文件,添加或修改server块:

server {
    listen 80;                 # 监听端口
    server_name localhost;     # 域名或IP
    
    # 静态资源根目录(指向构建后的前端项目目录)
    root /path/to/your/project/dist;  # 或 build 目录
    
    # 默认首页
    index index.html index.htm;
    
    # 处理SPA应用的路由
    location / {
        try_files $uri $uri/ /index.html;
    }
    
    # 静态资源缓存设置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        access_log off;
    }
}

4. SPA应用特别配置

对于React、Vue等单页应用(SPA),关键是要配置 try_files 指令,确保所有前端路由请求都能正确重定向到 index.html

location / {
    try_files $uri $uri/ /index.html;
}

这样当访问 /about/user/profile 等前端路由时,Nginx会返回 index.html,由前端框架来处理路由逻辑。

三、部署项目文件

1. 创建合适的目录结构

推荐的目录结构:

/var/www/
├── myapp/
│   ├── dist/          # 前端构建文件
│   │   ├── index.html
│   │   ├── css/
│   │   ├── js/
│   │   └── img/
└── logs/              # 日志文件

2. 复制项目文件

# 复制构建文件到Nginx指定目录
sudo cp -r /path/to/local/dist/* /var/www/myapp/dist/

3. 设置权限

# 设置正确的文件权限
sudo chown -R www-data:www-data /var/www/myapp/dist/
sudo chmod -R 755 /var/www/myapp/dist/

四、测试和启动

1. 测试配置文件

sudo nginx -t

如果显示 nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置正确。

2. 重新加载配置

# 重新加载Nginx配置
sudo nginx -s reload

3. 验证部署

打开浏览器,访问配置的域名或IP地址(如 http://localhosthttp://your-domain.com),检查前端项目是否正常运行。

五、进阶配置

1. Gzip压缩配置

http {
    # 开启gzip压缩
    gzip on;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

2. 反向代理API请求

如果前端需要访问后端API,可以配置反向代理:

location /api/ {
    proxy_pass http://localhost:3000/;  # 指向后端服务
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

3. 多项目部署

可以在一个Nginx实例上部署多个前端项目:

# 项目1
server {
    listen 80;
    server_name app1.example.com;
    root /var/www/app1/dist;
    # 其他配置...
}

# 项目2
server {
    listen 80;
    server_name app2.example.com;
    root /var/www/app2/dist;
    # 其他配置...
}

六、常见问题排查

  1. 403 Forbidden 错误:检查文件权限是否正确设置,确保Nginx用户有访问权限

  2. 路由刷新404:确保正确配置了 try_files $uri $uri/ /index.html;

  3. 静态资源无法加载:检查 root 路径是否正确,文件是否已复制到指定位置

  4. 配置不生效:使用 nginx -t 检查配置语法,确保 nginx -s reload 重新加载了配置

  5. 端口被占用:更改 listen 端口,或检查哪个进程占用了该端口并停止它

通过以上步骤,你可以成功地使用Nginx部署前端项目,无论是简单的静态网站还是复杂的单页应用。