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
- Intel芯片:
-
Linux:
- 主配置文件:
/etc/nginx/nginx.conf - 站点配置:
/etc/nginx/sites-available/
- 主配置文件:
-
Windows:
- Nginx安装目录下的
conf/nginx.conf
- Nginx安装目录下的
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://localhost 或 http://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;
# 其他配置...
}
六、常见问题排查
-
403 Forbidden 错误:检查文件权限是否正确设置,确保Nginx用户有访问权限
-
路由刷新404:确保正确配置了
try_files $uri $uri/ /index.html; -
静态资源无法加载:检查
root路径是否正确,文件是否已复制到指定位置 -
配置不生效:使用
nginx -t检查配置语法,确保nginx -s reload重新加载了配置 -
端口被占用:更改
listen端口,或检查哪个进程占用了该端口并停止它
通过以上步骤,你可以成功地使用Nginx部署前端项目,无论是简单的静态网站还是复杂的单页应用。