当前位置: 首页 > news >正文

【Linux】如何在 Linux 系统中使用 envsubst 来处理 Nginx 配置模板

一、创建 nginx.template 模板文件

vim nginx.template

复制下面文件内容

server {  listen ${BY_PORT};  server_name ${BY_HOST};  location /sys/ {  proxy_pass http://${BY_GRAFANA_HOST}:${BY_GRAFANA_PORT}/;  }  # 其他配置...  
}

这个模板中包含了几个环境变量:BY_HOSTBY_PORTBY_GRAFANA_HOSTBY_GRAFANA_PORT

接下来,你可以设置这些环境变量,并使用 envsubst 命令来生成最终的 Nginx 配置文件。在 Bash 脚本中,你可以这样做:

二、创建 modify.sh 脚本文件

vim modify.sh

复制下面文件内容:

#!/bin/bash  # 设置环境变量  
export BY_HOST="example.com"  
export BY_PORT="80"  
export BY_GRAFANA_HOST="grafana.example.com"  
export BY_GRAFANA_PORT="3000"  # 使用 envsubst 替换模板中的环境变量,并将结果写入 nginx.conf  
envsubst '$BY_HOST $BY_PORT $BY_GRAFANA_HOST $BY_GRAFANA_PORT' < nginx.template > nginx.conf  # 显示生成的配置文件  
cat nginx.conf

三、增加权限 执行脚本

chmod +x modify.sh ./modify.sh

当你运行这个脚本时,它会首先设置环境变量,然后使用 envsubst 将模板文件中的变量替换为相应的值,并将结果写入 nginx.conf 文件。最后,它使用 cat 命令显示生成的 Nginx 配置文件的内容。

执行这个脚本后,你应该会在当前目录下看到一个 nginx.conf 文件,内容如下:

server {  listen 80;  server_name example.com;  location /grafana/ {  proxy_pass http://grafana.example.com:3000/;  }  # 其他配置...  
}

请注意,这个示例假设 nginx.template 文件和脚本文件在同一个目录下。如果它们在不同的目录下,你需要相应地调整文件路径。

四、扩展

nginx.templatenginx.conf 之间的主要区别在于它们的用途和生成方式。

  1. 用途:
    • nginx.template:这是一个模板文件,其中包含了 Nginx 配置的骨架和一些占位符(如环境变量)。它通常用于自动化部署或配置管理,以便能够动态地插入特定的值(如主机名、端口号等)来生成最终的 Nginx 配置文件。
    • nginx.conf:这是 Nginx 的实际配置文件,其中包含了 Nginx 服务器运行所需的指令和设置。Nginx 进程在启动时会读取这个文件来配置其行为。
  2. 生成方式:
    • nginx.template:这个文件通常不直接由 Nginx 使用。相反,它会被一些工具或脚本(如 envsubst、Ansible、Chef、Puppet、Docker 的 ENVSUBST 指令等)处理,以替换其中的占位符,并生成最终的 nginx.conf 文件。
    • nginx.conf:这个文件是由人工或自动化工具创建的,并且可以直接被 Nginx 进程读取和使用。在大多数情况下,nginx.conf 文件是静态的,但在使用模板生成的情况下,它可能是由 nginx.template 动态生成的。
  3. 内容:
    • nginx.template:可能包含变量、注释和 Nginx 配置指令的混合。变量通常以某种形式(如 ${VARIABLE_NAME}$(VARIABLE_NAME))表示,以便在模板处理过程中被替换。
    • nginx.conf:只包含 Nginx 配置指令和值。这些值通常是具体的、静态的,除非使用某种形式的自动重新加载或热更新。
  4. 位置:
    • nginx.template:可能位于任何方便的位置,具体取决于你的部署流程或配置管理工具。它通常与源代码或配置管理代码一起存储。
    • nginx.conf:通常位于 Nginx 的配置目录中,这通常是 /etc/nginx/(在大多数 Linux 发行版中)或 /usr/local/nginx/conf/(如果你从源代码编译 Nginx)。
  5. 更新:
    • nginx.template:当需要更改 Nginx 配置的某些部分时,你可能需要更新模板文件,然后重新运行模板处理脚本来生成新的 nginx.conf 文件。
    • nginx.conf:直接编辑这个文件可能会很危险,因为它可能会被模板处理脚本覆盖。通常,你应该通过更新 nginx.template 并重新生成 nginx.conf 来更改配置。但是,在某些情况下(如手动添加自定义配置),你可能需要直接编辑 nginx.conf。在这种情况下,请确保你了解这些更改如何与模板处理流程交互。
http://www.lryc.cn/news/353050.html

相关文章:

  • 【LeetCode】438.找到字符串中所有字母异位词
  • 力扣96. 不同的二叉搜索树
  • 哈希表的用途
  • k8s笔记 | 高度调度
  • Rom应用开发遇到得一些小bug
  • Python简介
  • C++完成特色旅游管理信息系统
  • 贵州大学24计算机考研数据速览,国家重点实验室22408复试线285分!贵州大学计算机考研考情分析!
  • 分区4K对齐那些事,你想知道的都在这里
  • 达梦数据库学习笔记
  • 安卓绕过限制直接使用Android/data无需授权,支持安卓14(部分)
  • 【知识蒸馏】多任务模型 logit-based 知识蒸馏实战
  • C:技术面试总结
  • OpenHarmony 实战开发——一文总结ACE代码框架
  • 【数据结构与算法】之堆的应用——堆排序及Top_K问题!
  • 啊哈!算法-第2章-栈、队列、链表
  • 简述 v-if 和 v-show 的区别
  • Linux驱动学习之模块化,参数传递,符号导出
  • RabbitMQ02-RebbitMQ简介及交换器
  • Matlab自学笔记三十:元胞数组的修改、添加、删除和连接
  • 【LeetCode】数组——双指针法
  • react 低代码平台方案汇总
  • oss对象上传文件设置格式
  • 【Linux学习】进程
  • Python数据分析实验四:数据分析综合应用开发
  • 基于51单片机的盆栽自动浇花系统
  • SpirngMVC框架学习笔记(一):SpringMVC基本介绍
  • 实现信号发生控制
  • 二叉树基于队列实现的操作详解
  • LabVIEW常用开发架构有哪些