有什么办法可以包含每个请求重新加载configuration文件(也许只有当修改)?
就像是:
server { ... dynamic_include $document_root/.nginx; }
这可以使人们能够以有效的方式复制.htaccess在Apache中find,因为它是select性的,并不会stat()每个文件夹在那里…
普通的configuration文件只能被读取一次(在启动过程中以及当被请求的时候),但是你可以使用HttpLuaModule来在每个请求中对一段Lua脚本进行评估。 Nginx提供了4个请求阶段(重写,访问,内容,日志),其中可以执行Lua脚本。
下面是你可以用Lua做的一些事情(从手册):
- 在Lua中混合处理各种nginx上行输出(proxy,drizzle,postgres,redis,memcached等)的输出,
- 在请求实际到达上游后端之前,在Lua中进行任意复杂的访问控制和安全检查,
- 以任意方式操作响应头(由Lua)
- 从外部存储后端(如redis,memcached,mysql,postgresql)获取后端信息,并使用该信息来select哪个上游后端可以即时访问,
- 在内容处理程序中使用对数据库后端和其他存储的同步但仍然非阻塞的访问来编码任意复杂的Web应用程序,
- 在重写阶段在Lua中做非常复杂的URL调度,
- 使用Lua为Nginx的子请求和任意位置实现高级caching机制。
我不知道有什么办法去做你想要的。
我在使用nginx进行任何工作时,或者在研究nginx文档或Internet时,都没有遇到过这种情况。
如果这样的事情存在(或者是可行的),它可能作为一个模块存在(尽pipe我没有find一个能够做你想要的) http://wiki.nginx.org/Modules
您的主要configuration文件将理想地看所有您的configuration存储在一个文件夹。 如果你的configuration存储在其他位置,build议将符号链接到这些位置,以便nginx仍然是事物,他们都存储在一个地方。
什么是可能的,是…手动(或通过脚本)重新加载nginx:
http://wiki.nginx.org/CommandLine
configuration重新加载使用新configuration启动新的工作进程优雅地closures旧的工作进程
你可以创build一个bash脚本,可以通过.conf(或.nginx)监视某些文件夹的修改或新文件,然后重新加载nginx。
警告:我不确定这是一个好主意(自动重新加载nginx),至less不是在生产中…因为你可能有一个语法错误,或者一个不好的configuration,如果不正确的testing可能会导致不良影响。
您可以使用通配符文件夹名称。 例如,如果您的文档根目录是/path/example.com/.nginx,则可以使用
include /path/*/.nginx
但是这个文件在开始/重新加载时将被读取一次,而不是dynamic的。