直接在内存中修改nginx配置?
Modifying nginx config directly in memory?
这可能是一个非常愚蠢的问题,但我仍然会问。
Nginx 读取 nginx.conf 文件并将信息保存在 memory/cache 中,直到您执行 'nginx -s reload'。
有没有一种方法可以直接在内存中修改 nginx 配置,因为我需要每分钟重新加载多次并且配置文件可能很大。
基本上我要解决的问题是我有多个 docker 容器在一组主机上动态地上下移动。每次出现容器时,它都会打开不同的 IP 和端口(应用程序设计约束)。我正在考虑使用 Nginx 作为反向代理。考虑到最终产品可能在主机集群上有 3000 - 5000 个容器 运行,我应该怎么做才能解决这个问题。容器 launched/destroyed 的速率可能约为 100 个 second.I 需要一种快速方法来确保路由正确发生
嗯,可能不会,nginx 会在多个 worker 中加载它的配置,所以尝试即时更改它看起来不是一个好主意。
你的目标是什么?您似乎需要做一些动态路由或其他类型的处理。你应该看看:
- nginx 指令和模块,例如 eval
- Lua 脚本
- nginx 模块开发(在 C/C++ 中)
这将允许你或多或少做任何你想做的事情,你可以在像 redis 这样的数据库中读取一些配置,并根据 Redis 中的值改变你的代码的行为。
例如,您可以通过读取 Redis 中的一个值,然后在您的 nginx 配置文件中使用 if 指令来做很多事情。您可以使用 How can I get the value from Redis and put it in a variable in NGiNX? 通过 eval 模块在 nginx 中获取 redis 值。
更新:
关于nginx中的动态IP,你应该看看Dynamic proxy_pass to $var with nginx 1.0。
所以我建议你:
- 有一个进程在 redis 中写入您的码头工人的 IP 地址
- 用nginx中的eval和redis模块读取
- 使用代理值
这可能是一个非常愚蠢的问题,但我仍然会问。 Nginx 读取 nginx.conf 文件并将信息保存在 memory/cache 中,直到您执行 'nginx -s reload'。 有没有一种方法可以直接在内存中修改 nginx 配置,因为我需要每分钟重新加载多次并且配置文件可能很大。
基本上我要解决的问题是我有多个 docker 容器在一组主机上动态地上下移动。每次出现容器时,它都会打开不同的 IP 和端口(应用程序设计约束)。我正在考虑使用 Nginx 作为反向代理。考虑到最终产品可能在主机集群上有 3000 - 5000 个容器 运行,我应该怎么做才能解决这个问题。容器 launched/destroyed 的速率可能约为 100 个 second.I 需要一种快速方法来确保路由正确发生
嗯,可能不会,nginx 会在多个 worker 中加载它的配置,所以尝试即时更改它看起来不是一个好主意。
你的目标是什么?您似乎需要做一些动态路由或其他类型的处理。你应该看看:
- nginx 指令和模块,例如 eval
- Lua 脚本
- nginx 模块开发(在 C/C++ 中)
这将允许你或多或少做任何你想做的事情,你可以在像 redis 这样的数据库中读取一些配置,并根据 Redis 中的值改变你的代码的行为。
例如,您可以通过读取 Redis 中的一个值,然后在您的 nginx 配置文件中使用 if 指令来做很多事情。您可以使用 How can I get the value from Redis and put it in a variable in NGiNX? 通过 eval 模块在 nginx 中获取 redis 值。
更新:
关于nginx中的动态IP,你应该看看Dynamic proxy_pass to $var with nginx 1.0。 所以我建议你:
- 有一个进程在 redis 中写入您的码头工人的 IP 地址
- 用nginx中的eval和redis模块读取
- 使用代理值