10

nginx の Lua モジュールを使用して、リクエストの本文で JSON に基づく変数 (「foo」) を設定しようとしています。次に、その変数の値をアクセス ログに記録します。

そのようです:

http {
    log_format mylogfmt '$remote_addr - $remote_user [$time_local] \
        "$request" $status $body_bytes_sent "$http_referer" \
        "$http_user_agent" "$foo"'
}

location / {
    proxy_pass http://remote-server.example.com/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_connect_timeout 150;
    proxy_send_timeout 100;
    proxy_read_timeout 100;
    proxy_buffers 4 32k;
    client_max_body_size 8m;
    client_body_buffer_size 128k;

    rewrite_by_lua '
        cjson = require "cjson"
        ngx.req.read_body()
        body_table = cjson.decode(ngx.var.request_body)
        ngx.var.foo = body_table["foo"]
    ';

    access_log /var/log/nginx/access.log mylogfmt;
}

ただし、nginx はこの構成では起動しません。それは次のように不平を言う:

danslimmon@whatever:~$ sudo /etc/init.d/nginx reload
Reloading nginx configuration: nginx: [emerg] unknown "foo" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

その場所に「set $foo "-"」を追加しようとしましたが、Lua で行っていることを上書きしているようです。

考え?

私のnginx -V出力

4

2 に答える 2

5

Lua モジュールが変数 $foo を使用する前に、変数 $foo を定義する必要があります。使用する前に、場所ディレクティブ内で変数を定義する例についてドキュメントを確認してください。

于 2013-08-02T23:19:53.243 に答える