使用 Nginx 部署多个 React 项目
前言
最近需要重写一个已上线的 React 后台管理项目,但是这个项目比较久远,代码不规范,比较混乱,混杂了很多的 UI 框架,如 material-ui (一个叫 react-admin 的库用到了它)、reactbulma (可能是想丰富下 UI 组件)、antd 等,这让界面看上去风格很不统一,我接手时也一脸懵,不知道现在得用哪一个 UI 组件库。
所以,我提出了另起炉灶,重写项目的想法。为了让项目已上线的功能不受影响,我打算将新项目部署到域名的/v2/路径上,原来的项目依旧在/根路径上不受干扰,老项目重写好的功能通过location.replace('/v2/')方法跳转到新项目进行使用,新加的功能就直接在新项目上开发了。
新项目配置
新项目使用了create-react-app脚手架创建,那么,直接可以在package.json文件中添加homepage键:
{
"name": "admin-v2",
"version": "0.1.0",
"private": true,
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"homepage": "/v2"
}
主要就是为了修改webpack打包时的publicPath配置,另外create-react-app也可以通过.env文件配置PUBLIC_URL环境变量来改变。
Nginx 配置
server {
listen 80;
listen [::]:80;
server_name localhost;
index index.html;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html =404;
}
location /v2/ {
alias /usr/share/nginx/html_v2/;
try_files $uri $uri/ /v2/index.html =404;
}
error_page 404 /;
}
新增了/v2的 location 配置块,让用户访问/v2/时使用新的项目。
新项目构建后build文件夹下的静态文件放在/usr/share/nginx/html_v2/下,使用alias代替了root关键字,当访问/v2/时会自动访问html_v2文件夹下的文件。
location /v2 {
root /usr/share/nginx/html;
}
我们访问/v2,实际访问的是/usr/share/nginx/html/v2/;
我们访问/v2/index.html,实际访问的是/usr/share/nginx/html/v2/index.html。
可见,使用 root 会让 location 的路径加到 root 配置的路径后进行访问
location /v2 {
alias /usr/share/nginx/html/;
}
我们访问/v2,实际访问的是/usr/share/nginx/html/;
我们访问/v2/index.html,实际访问的是/usr/share/nginx/html/index.html。
可见,使用 alias 会让访问 location 路径时就是访问的 alias 配置的路径,也就是一个别名
所以我们的场景下需要使用alias进行配置。
版权声明:
Cody's Blog文章皆为站长Cody原创内容,转载请注明出处。
包括商业转载在内,注明下方要求的文章出处信息即可,无需联系站长授权。
请尊重他人劳动成果,用爱发电十分不易,谢谢!
请注明出处:
本文出自:Cody's Blog
本文永久链接:https://okcody.com/posts/server/9