🧑‍🏫
liualexiang
  • Introduction
  • Azure
    • AKS Basic
    • AKS Spark
    • AZ ACR SYNC
    • Azure CMI SDWAN
    • Azure LB DeepDive
      • Azure LB DeepDive
    • Azure Service Principal Basic
    • Azure Internal VM Network Connectivity
      • Azure Internal VM Network Connectivity
    • Azure Cli Build
    • Azure Vm Memory Monitor
  • Blockchain
    • BTC
  • CRISPR
    • 使用Parallel_Cluster提升CRISPA效率
  • OpenSource
    • ElasticSearch
      • ES Get Started
      • ES Search Query
      • Kibana 可视化
      • Logstash配置
    • Ansible 基础
    • Infra As Code
      • Pulumi Get Started
      • Terraform Basic
    • ZooKeeper 基础
    • RPC与REST
    • 使用Python申请大量内存测试
    • 使用TPC_DS产生压测数据
    • Superset
      • Superset部署手册
    • 代码扫描
    • Git
      • Git Basic
      • Github Action Basic
      • Gitlab与AzureAD集成
      • Gitbook 基础教程
    • K8S
      • enter_node
      • K8s X509 Client Cert
      • K8s Basic
      • K8s Oidc
      • Docker 基础
      • helm基础
      • K8S_Secrets管理
      • 深入了解K8S
      • 混沌工程
      • Istio
      • 生态
      • CRD开发
      • k8s网络
    • Cloud_Custodian
    • Jenkins Basic
    • Nginx
    • ETCD
    • 正则
    • VictoriaMetrics
    • Kafka
  • MySQL
    • MySQL 调优
  • Linux
    • SSH Tunnel 上网
    • 内存管理
    • 在Linux系统中通过LUKS加密磁盘
    • 量子计算 Basic
    • IO多路复用
    • Iptables
    • tmux和screen
    • Systemd
    • OS 基础
    • jq基础
    • yum
    • neovim
  • Web
    • Html Css
    • Web部署
    • 缓存
  • Programming
    • 算法
      • 返回list中最大生序子序列长度
    • Python技巧
      • Python的语法糖
      • Python常用装饰器
      • AsyncIO基础
      • 自动化测试pytest
      • python中的下划线
      • 面向对象
      • Python的坑
      • Python配置文件管理
      • HTTP Stream Response
      • Python项目管理
    • 设计模式
      • 设计模式
      • 面向对象的思想
      • 编程概念
    • Go
      • Go 基础
      • Go常用功能
      • 结构体入门
    • 前端
    • Vue
    • NodeJS
  • Math
    • 多项式插值法
  • Security
    • HTTP常见攻击
    • 加密与签名
    • RSA
    • ECDSA
  • Solidity
    • Solidity基础
    • Blockchain Testnet Faucet
  • Tools
    • 视频处理ffmpeg
    • IDE配置
    • iTerm2美化
    • 密码管理
    • FRP配置
    • 工具集
由 GitBook 提供支持
在本页
  1. Web

Web部署

对于一个前后端的项目,最好是前后端用不同的域名,这样前端项目可以完全放在S3等静态网站上,往后端转发请求的时候,可以直接输入后端的域名。这样就能做到前后端分离。

但是有时候业务已经跑起来了,没办法实现前后端分离,以一个 npm build生成 html 以及动态的js文件为例 (动态js指的是js 文件名为 abc.HASH.js,之所以文件名中间有个hash值,是为了在生成新的js文件时候CDN回源),同时后端还有一个server应用,那么有几种部署模式:

  1. 将npm build的 html以及 js全部打包到一个nginx容器里,在nginx容器里配置转发特定的请求到后端server

  2. 将 npm build 的html以及js文件,放到一个 NFS或者ceph,然后nginx容器启动的时候挂载这个路径,跟#1使用的方式一样

  3. 将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相对来说是比较好的。

上一页Html Css下一页缓存

最后更新于2年前