如何为搭载Node.js、React的Linux Azure Web App启用gzip压缩
Azure Linux部署槽nginx gzip配置持久化解决方案
该需求完全可实现,无需修改容器内默认的临时nginx.conf文件,以下是2种官方支持的持久化方案:
方案一:使用自定义启动脚本(推荐,适用于所有内置运行栈)
- 第一步:在应用代码根目录新建自定义gzip配置文件
gzip.conf,写入所需配置,示例如下:
gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/javascript application/json;
- 第二步:同目录新建启动脚本
startup.sh,内容参考(需要根据你的应用运行栈调整最后一行的应用启动命令):
#!/bin/bash # 将自定义配置复制到nginx自动加载目录 cp /home/site/wwwroot/gzip.conf /etc/nginx/conf.d/ # 重载nginx配置使其生效 nginx -s reload # 替换为你的应用原有启动命令,以下为不同运行栈示例: # Node.js: pm2 start /home/site/wwwroot/server.js # Python: gunicorn --bind=0.0.0.0 --timeout 600 application:app # PHP: 不需要额外启动命令,php-fpm会默认启动
- 第三步:本地给
startup.sh添加执行权限,执行chmod +x startup.sh,之后将两个文件和应用代码一起打包部署到部署槽 - 第四步:进入Azure门户对应部署槽的「配置」-「常规设置」页,在「启动命令」输入框填入:
/home/site/wwwroot/startup.sh
保存后重启部署槽即可生效,配置会持久保存在Azure为应用挂载的/home持久化存储中,重启不会丢失。
方案二:使用自定义容器镜像(适用于容器部署场景)
如果你当前使用自定义容器部署应用,直接在Dockerfile中完成nginx配置修改即可:
- 将自定义gzip配置或者修改完成的完整
nginx.conf在镜像构建阶段复制到容器内对应路径 - 构建完成的镜像推送到容器镜像仓库后,配置部署槽拉取该镜像启动即可,配置直接固化在镜像中,重启不会丢失。
补充说明:早年的相关讨论提到无法实现是因为当时Azure Linux App Service还未开放自定义启动脚本能力,目前该能力已经完全开放。nginx默认主配置会自动加载
/etc/nginx/conf.d/目录下所有.conf后缀的配置,优先级高于主配置中的注释项,无需修改默认主配置即可覆盖gzip规则。
内容的提问来源于stack exchange,提问作者kpollock
相关产品推荐
相关产品推荐

