Web部署
对于一个前后端的项目,最好是前后端用不同的域名,这样前端项目可以完全放在S3等静态网站上,往后端转发请求的时候,可以直接输入后端的域名。这样就能做到前后端分离。
但是有时候业务已经跑起来了,没办法实现前后端分离,以一个 npm build生成 html 以及动态的js文件为例 (动态js指的是js 文件名为 abc.HASH.js,之所以文件名中间有个hash值,是为了在生成新的js文件时候CDN回源),同时后端还有一个server应用,那么有几种部署模式:
将npm build的 html以及 js全部打包到一个nginx容器里,在nginx容器里配置转发特定的请求到后端server
将 npm build 的html以及js文件,放到一个 NFS或者ceph,然后nginx容器启动的时候挂载这个路径,跟#1使用的方式一样
将npm build的js文件,放到S3或CDN上,然后启动一个nginx容器,将html放到nginx里,在nginx容器里设置转发,匹配 *~ /.js 后缀,将/static/ 路径rewrite到 S3上。
对于上述几个方案,如果使用 #1,所有的一切文件都在nginx里,那么在应用部署的时候,可能会出现一个问题:由于js是动态生成的,每次js文件都不一样,当浏览器访问html,获得的是新的js路径,但浏览器再发一个请求,可能会访问到旧容器,旧容器里没有新的js文件,就出现404报错。反之亦然。如果关闭 js的动态生成,将js名字固定下来,那么在发版的时候,有可能会出现新旧页面不一致的情况(不会导致网页不可用,此为折中方案,看业务需求)。因此在前后端业务无法分离的情况下,可采取#2 和 #3相对来说是比较好的。
最后更新于