0

優れたライブラリhttps://github.com/openresty/lua-nginx-moduleを使用して、Nginx 変数を PHP 7.0 バックエンドに渡す必要があります。

「set」関数のドキュメントには「このディレクティブは、Nginx イベント ループがコード実行中にブロックされるため、短くて高速に実行されるコード ブロックを実行するように設計されているため、content_by_lua_block代わりにを使用することを好みます。したがって、時間のかかるコード シーケンスは避ける必要があります。 set_by_lua_block"。 https://github.com/openresty/lua-nginx-module#set_by_lua

ただし、「content_...」関数はノンブロッキングであるため、次のコードは時間内に返されず、PHP に渡されるときに $hello が設定解除されます。

location ~ \.php{
    set $hello '';

    content_by_lua_block {
        ngx.var.hello = "hello there.";
    }

    fastcgi_param HELLO $hello;
    include fastcgi_params;
    ...
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

問題は、たとえば暗号を使用して、特定のコード パスが使用される場合、私の Lua コードが「時間のかかるコード シーケンス」になる可能性があることです。

次の Nginx の場所は正常に機能しますが、これは set_by_lua_block() がブロッキング関数呼び出しであるためです。

location ~ \.php {
    set $hello '';

    set_by_lua_block $hello {
        return "hello there.";
    }

    fastcgi_param HELLO $hello;
    include fastcgi_params;
    ...
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

私の質問は、ここで最善のアプローチは何ですか? fastcgi_pass変数が設定された後にのみ、 content_by_lua_block() 内からNginx ディレクティブと関連するディレクティブを呼び出す方法はありますか?

4

1 に答える 1