0

nginx ログ形式は次のとおりです。

log_format  main  '$remote_addr [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$cookie_logintoken"';

log_by_lua_file を設定しました

log_by_lua_file xxxxx/ngx_lua_waf/log.lua;

および log.lua コンテンツ:

ngx.req.set_header("User-Agent", "this is testing User-Agent")
ngx.req.set_header("Referer", "this is testing Referer")

および access.log の変更

127.0.0.1 [17/Dec/2016:16:21:47 +0800] "GET /test/client.php HTTP/1.1" 200 1370 "this is testing Referer" "this is testing User-Agent" "-" "-"

$request のように nginx ビルドイン変数を変更するにはどうすればよいですか? nginxログ前の「GET /test/client.php HTTP/1.1」をaccess.logに変更したい

ngx.var.request = "xxxx" はエラーになります:

failed to run log_by_lua*: xxxx/ngx_lua_waf/log.lua:15: variable "request" not changeable

しかし、私は ngx.req.set_header でそれを変更する方法を知りません

誰かがそれを変更する方法を教えてもらえますか?

4

1 に答える 1

1

Nginx Lua を使用していくつかの埋め込み Nginx 変数を変更できますが、埋め込みリクエスト変数cannotは変更する必要があります。

実際には、埋め込み変数は変更できない、またはおそらくより正確には、変更すべきではないという最初の仮定が必要です。

埋め込み変数の修正版が必要な場合はいつでも、カスタム変数を定義し、そのカスタム変数に変更を加えて、代わりにこれを使用します。

あなたの特定のケースでは:

    ### 
    ### Rewrite Phase ###
    ###

    #  Create your custom variable with a default value
    #  Runs before Log Phase so variable is available in Log Phase
    set $changed_request "-";


    ### 
    ### Log Phase ###
    ###

    ## log_by_lua* directives (Runs before inbuilt Log Phase directives)
    #  Update the custom variable etc
    log_by_lua_block {
        ngx.req.set_header("User-Agent", "this is testing User-Agent")
        ngx.req.set_header("Referer", "this is testing Referer")

        ngx.var.changed_request = ngx.var.request 
        -- Now do whatever changes you want to $changed_request.
    };

    ## Inbuilt Log Phase directives
    #  Define a custom log format with your custom variable
    log_format  customlogformat  '$remote_addr [$time_local] "$changed_request"'
        ' $status $body_bytes_sent "$http_referer" "$http_user_agent" '
        ' "$http_x_forwarded_for" "$cookie_logintoken"';

    #  Use your custom log format
    access_log /path/to/access.log customlogformat;
于 2016-12-17T09:48:12.940 に答える