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