如何通过 HTTP 请求重新加载 nginx.conf?

如何通过 HTTP 请求重新加载 nginx.conf?

我想生成一个 nginx 应该阻止的 IP 列表。此列表应通过在 Web 服务器上执行的操作进行更新。例如添加新 IP 或删除 IP。这意味着它为 nginx 创建“firewall.conf”。

问题:nginx 不监控 .conf 文件中的更改,因此我需要运行“nginx reload”。因为我们的托管公司不允许执行(),我无法执行它。

所以我的问题是:是否可以通过 HTTP 请求重新加载 nginx .conf 文件?

其想法是调用“http://example.org/?secret=key”并触发“nginx reload”。

答案1

这当然不可能立即实现。以下是一些关于如何实现的想法:

  1. 如果你能够向 nginx 进程发送信号,你可以尝试发送 HUP 信号:posix_kill($pid_of_nginx, SIGHUP)。当然,这需要 PHP 中的 POSIX 函数。
  2. 编写一个程序,监听reload命名管道上的命令并通过重新加载 nginx 做出反应。使用 PHP,您只需将必要的命令写入命名管道即可。
  3. 与 2 相同。使用一个程序定期检查给定位置的特定文件 (例如/tmp/reload-nginx)。然后在 PHP 中创建该文件,然后 nginx 将重新加载。

编辑:“管道问题”并不是那么困难:

#!/bin/bash
pipe=/tmp/mypipe
trap "rm -f $pipe" EXIT

if [ ! -p "$pipe" ]; then
  mkfifo $pipe
fi

while true; do
  if read line <$pipe; then
    if [ "$line" == "reload" ]; then
      ...do the reload here...
    fi
  fi
done

现在,echo reload >/tmp/mypipe将唤醒该脚本并让您做您想做的事情。

相关内容