一、创建 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。在这种情况下,请确保你了解这些更改如何与模板处理流程交互。