跨发行版确定 Nginx 配置位置的方法

跨发行版确定 Nginx 配置位置的方法

我正在开发一个项目,理想情况下应该可以在任何 Linux 发行版或 FreeBSD 上运行,只需最少的手动安装,而无需打包到每个发行版的存储库中。它包括/etc/nginx/一个与安装脚本一起复制到的 Nginx 配置文件。

障碍:并非所有操作系统都将其存储在同一个位置。在我所知道的每个 Linux 中,它都输入/etc/nginx/,但在 FreeBSD 上,它输入/usr/local/etc/nginx/。 (我的项目有Nginx作为依赖,Nginx预计通过操作系统包管理器安装。)

那么,以编程方式确定配置文件需要放在哪里的最佳方法是什么?

答案1

最好的方法是直接询问 nginx。

nginx -t

测试默认配置文件并显示其位置(如果未找到,还会引发文件路径错误)。

例子:

$ nginx -t
nginx: [emerg] open() "/opt/common/conf/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /opt/common/conf/nginx.conf test failed

nginx -h可能会想使用 -V 标志。 nginx -V如果配置文件不可用,则该配置文件将不起作用。

要以编程方式使用此功能,请参阅所需编程语言的文档。您正在寻找执行 shell 命令并存储输出的方法。

下面是一个关于如何在 bash 中编写脚本的示例:

NGINX_CONFIG_PATH=`nginx -t 2>&1 | grep -m1 -o '/.*.conf'`
cp $INPUT_FILE $NGINX_CONFIG_PATH

分解一下:

  • 2>&1 将 nginx STDERR 输出重定向到 STDOUT,以便我们可以处理它。
  • grep 的 -m1 仅显示第一次出现。
  • -o 将搜索范围缩小到正则表达式
  • /.*.conf 搜索第一次出现的 / 直到 .conf

答案2

根据不同的操作系统来做出判断是个好主意。

if [ -d /etc/nginx ]; then 
    cp YOURFILE /etc/nginx/
elif [ -d /usr/local/etc/nginx/ ]; then
    cp YOURFILE /usr/local/etc/nginx/
else
    cp YOURFILE /some_other_dir/
fi

相关内容