是的,我这个需求需要增加upstream。
upstream的信息是从策略文件中定时导入的
假设策略文件最开始的信息如下所示:
{
server_name: www.website1.com;
upstream www.website1.com {
192.168.100.1:8000;
192.168.100.2:8001;
}
}
{
server_name: www.website2.com;
upstream www.website2.com{
192.168.100.3:8002;
192.168.100.4:8003;
}
}
运行一段时间后,策略文件可能会增加www.website3.com,www.website4.com的信息
{
server_name: www.website3.com;
upstream www.website3.com {
192.168.100.5:8004;
192.168.100.6:8005;
}
}
{
server_name: www.website4.com;
upstream www.website4.com{
192.168.100.7:8006;
192.168.100.8:8007;
}
}
这样一个需求,能使用balancer_by_lua来完成吗?ngx-lua是不是不支持动态增加upstream?
我理解如果采用balancer_by_lua的话,是不是需要根据server_name来选择一个host:port,然后调用balancer.set_current_peer(host, port),这个函数就是把host:port设为请求转发的后端吧?
那根据server_name如何选择host:port呢,比如www.website1.com到底是要选择192.168.100.1:8000还是192.168.100.2:8001,这个策略需要我自己设定吗?
我知道nginx有自带的round-robin,和基于ip的hash算法
谢谢!
在 2016年3月10日星期四 UTC+8上午9:31:14,doujiang写道:
Hello
在 2016年3月9日 下午7:32,
<wangw...@gmail.com>写道:
之前说的不完整,整个流程应该是这样:
1. 前端请求发到nginx,nginx选择一个server,然后server将请求转发到别的机器
2. 每个server转发的机器是不相同的
所以,应该不能直接复用一个server吧?
之前的思路是:
1. 在nginx.conf建一个server的模板
2. 读取虚拟主机信息的文件,对每条信息通过用模板赋值来新建一个server
3. 对新建的server更改server_name, upstream等信息
你这里除了会增加 server,还可能需要增加 upstream ?
server 和 upstream 都可以复用的,你可以看看 balancer_by_lua
4. 把所有的server连起来,之后开始处理请求
不知道这个想法是否正确,lua是否能实现上述想法。
在 2016年3月9日星期三 UTC+8下午6:28:00,doujiang写道:
Hello,
在 2016年3月9日 下午6:18, <wangw...@gmail.com>写道:
有这样一个需求:
有大量的虚拟主机,在配置文件无法列出所有的信息,所以我想从文件中读取虚拟主机的配置信息后,然后用代码创建server,由于虚拟主机的个数可能不定时的增加,能否做成一个定时的任务,
请问用lua能实现这个需求吗?
这种场景,最好直接复用一个 server。再在需要的区分,比如在 content_by_lua 里根据 host 信息区分处理。
ssl_certificate_by_lua_file这条指定是每次进行https访问时都会连接吗?如果在lua文件中设定了ssl证书,那每次访问,设定证书的操作都会做一遍?
貌似这个问题,跟标题无关
不是的,见文档。
This Lua handler does not run at all, however, when NGINX/OpenSSL successfully resumes the SSL session via SSL session IDs or TLS session tickets for the current SSL connection. In other words, this Lua handler only runs when NGINX has to initiate a full SSL handshake.
--