2016-05-10 19 views
0

私はプロキシサーバーとしてnginxをセットアップしました。基本的にHTTP URLを特定のIPアドレスに転送する必要があります。以下は私の設定ですNginxがluaプラグインを使用して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アドレスに設定されています。論理は健全です、私は別々にテストしました。毎回私はnginxのサーバーを照会しかし、私は次のエラーを取得する:直接IPアドレスを送信していた場合、私はわからない

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" 

、なぜそれがリゾルバを必要としません。とにかく、私は位置指示文に以下を追加しました

resolver 127.0.0.1 

ドメイン名を解決するためにdnsmasqをインストールしました。それはまだcouldnt。代わりに次のエラーが表示されます。

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" 

答えて

0

代わりcontent_by_luaのhttps://github.com/openresty/lua-nginx-module#balancer_by_lua_block を使用shoud。 ここにいくつかの例を示しますhttps://github.com/openresty/lua-resty-core/blob/master/lib/ngx/balancer.md

Nginx configは線形的に実行されません。 は、ここで私は知っている最高のチュートリアルです -

もう1つの可能な解決策http://openresty.org/download/agentzh-nginx-tutorials-en.html

更新:

set_by_lua_block $upstream1 { 
     length = string.len(ngx.var.token) 
     if length < 8 then 
      -- cannot use this API here, you should add error processing 
      --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" 
     } 
     return in_server[count%7] 
} 
1
あなたは "$ upstream1を設定するので、あなたの代わりに "content_by_lua" の "rewrite_by_lua" を使用する必要があります

"、あなたはそれを書き直さなければなりません。

関連する問題