前面完成博客展示页面3000端口下部署至80端口,现在我们还需要将博客管理系统也部署该端口下,下面主要介绍下如何将该打包后的React资源正确部署。
目的
我们部署主要是为了实现于展示页面的统一性,如果再开放一个二级域名专门部署管理页面,对我们来说使用起来不太方便。何况部署https还需要申请两个证书。
思路与分析
为了实现将这两个应用部署于同一个域名下,首选需要对路由进行很好的规划设计:
graph LR; A[博客系统] -->|Next博客展示页
root:/和port:3000| B(http://localhost:3000/*) B --> C{80端口访问完成} A -->|React博客管理页
root:/manage和port:5000| D(Nginx静态资源托管+服务端口转发) D --> C
对于其他路径/*
认为请求的就是博客展示页面,该部分在前面已经完成。对于博客管理页面我们访问/manage/*
的即可,下面开始一步一步实现。
解决方案
React路由设计
一、设置package.json
加入一行:
1 | { |
二、正常情况下我们在设计路由时默认根路径就是/
,现在稍作改动需要在打包项目时给BrowserRouter
指定basename即可(ps:管理页根路径为/manage
不再是通常的/
了)。
1 | <BrowserRouter basename="/manage"> // 加入basename后,我们设计的例如/edit的路由和相应的path都会自动加上/manage的前缀。 |
三、最后就是打包文件夹的名称也要修改,在npm run eject
后的项目目录config
中找到paths.js
修改appBuild
。
1 | module.exports = { |
Nginx配置
在nginx.conf文件中加入如下配置代理请求80端口转发至我们的管理页项目。
1 | server { |
我的React应用中涉及的服务代理在如下setupProxy.js
中。
1 | // setupProxy.js |
现在我们也要通过Nginx实现该服务的代理。否则静态资源中的接口访问都是404。因为所有的增删改查接口都放在博客展示页r中完成的,所以也去访问3000端口,当然每个人视情况而定。
1 | # 将静态资源涉及到的服务代理转发至3000端口 |
补充加斜杠和不加斜杠的区别:
graph LR; /api/list-->|proxy_pass加上斜杠|A["http://127.0.0.1:3000/list"]; /api/list-->|proxy_pass不加斜杠|B["http://127.0.0.1:3000/api/list"]