我已将 nginx 设置为代理服务器。它基本上应该将 HTTP URL 转发到特定的 IP 地址。以下是我的配置
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location ~ ^/db/([-_a-zA-Z0-9/]+)/series {
set $token $1 ;
set $upstream1 " ";
content_by_lua 'length = string.len(ngx.var.token)
if length < 8 then
ngx.say("Invalid token (less than 8 characters)")
return
end
local count = 0
for i=1,8 do
count = count + string.byte(ngx.var.token,i)
end
in_server = {
[0] = "10.0.0.1:8086",
[1] = "10.0.0.2:8086",
[2] = "10.0.0.3:8086",
[3] = "10.0.0.4:8086",
[4] = "10.0.0.5:8086",
[5] = "10.0.0.6:8086",
[6] = "10.0.0.7:8086",
[7] = "10.0.0.8:8086"
}
ngx.var.upstream1 = in_server[count%7]
';
proxy_pass http://$upstream1;
}
}
}
上游变量设置为基于令牌类型的 IP 地址。逻辑是合理的,我在lua中单独测试过。但是每次我查询 nginx 服务器时,我都会收到以下错误:
2016/05/09 17:20:20 [error] 32680#0: *1 no resolver defined to resolve , client: 127.0.0.1, server: , request: "GET /db/rustytoken/series?&q=select%20%2A%20from%20foo%20limit%201 HTTP/1.1", host: "localhost:8080"
我不确定,如果要发送直接 IP 地址,为什么需要解析器。无论如何,我在位置指令中添加了以下内容
resolver 127.0.0.1
并安装了 dnsmasq 来解析域名。还是不行。我收到以下错误。
2016/05/09 17:14:22 [error] 32030#0: *1 could not be resolved (3: Host not found), client: 127.0.0.1, server: , request: "GET /db/rustytoken/series?q=select%20%2A%20from%20foo%20limit%201 HTTP/1.1", host: "localhost:8080"