nginx 有动态包含吗?

nginx 有动态包含吗?

有没有办法包含一个在每次请求时重新加载的配置文件(可能仅在修改时)?

就像是:

server {
    ...
    dynamic_include $document_root/.nginx;
}

这使得人们能够以有效的方式重现 Apache 中发现的 .htaccess选择参加并且不是stat()每个文件夹都在那里...

答案1

正常配置文件只读取一次(在启动期间以及外部请求时),但您可以使用HttpLua模块拥有一片Lua每次请求时都要评估脚本。Nginx 提供了 4 个请求阶段(重写、访问、内容、日志),其中可以执行 Lua 脚本。

以下是你可以用 Lua 做的一些事情(来自手册):

  • 在 Lua 中混合和处理各种 nginx 上游输出(代理、drizzle、postgres、redis、memcached 等)的输出,
  • 在请求实际到达上游后端之前,在 Lua 中执行任意复杂的访问控制和安全检查,
  • 以任意方式操纵响应头(通过 Lua)
  • 从外部存储后端(如 redis、memcached、mysql、postgresql)获取后端信息,并使用该信息选择要动态访问的上游后端,
  • 在内容处理程序中编写任意复杂的 Web 应用程序,使用同步但非阻塞的方式访问数据库后端和其他存储,
  • 在重写阶段使用 Lua 进行非常复杂的 URL 调度,
  • 使用Lua实现Nginx子请求和任意位置的高级缓存机制。

答案2

我不知道有什么方法可以实现你所寻找的事情。

在我使用 nginx 的任何工作中,或者在研究 nginx 文档或互联网时,我都没有遇到过这种情况。

如果存在这样的事情(或可行),它可能作为一个模块存在(虽然我找不到一个能满足你要求的模块)http://wiki.nginx.org/Modules

以下是一个建议:

理想情况下,您的主配置文件应位于存储所有配置的一个文件夹中。如果您的配置存储在其他位置,建议创建指向这些位置的符号链接,以便 nginx 仍然认为它们都存储在一个位置。

一些值得思考的事情:

可能的是......手动(或通过脚本)重新加载 nginx:

http://wiki.nginx.org/CommandLine

重新加载配置 使用新配置启动新的工作进程 正常关闭旧的工作进程

您可以创建一个 bash 脚本,该脚本可以使用 .conf(或 .nginx)监视某些文件夹中的修改或新文件,然后继续重新加载 nginx。

警告:我不确定这是否是个好主意(自动重新加载 nginx),至少在生产中不是这样...因为如果没有经过适当的测试,您可能会遇到语法错误或其他不良配置,从而可能导致不利影响。

答案3

您可以使用通配符文件夹名称。例如,如果您的文档根目录是 /path/example.com/.nginx,则可以使用

include /path/*/.nginx

但是该文件将在启动/重新加载时被读取一次,而不是动态的。

相关内容