0

私は現在、LUA スクリプトで httpd を使用して、遅延、障害、およびプロキシを導入するテスト ハーネスを作成しています。これには、同じタグの複数の値を含む可能性のあるクエリ文字列の解析が含まれます。つまり:

?ref=12345678&ref=01012052&ref=30257523 

これにより、メッセージ フローの特定のポイントでメッセージを遅らせたり、特定の要求を別のエンドポイントにリダイレクトしたりできます。私の問題は、提供されている LUA テーブルで使用できるものに関係しています。

私が抱えている問題は、上記のクエリ文字列で以下のコードのようなものを使用して、操作している値を単純にログアウトする場合です。

function output_multi_values(r)
  local queryString, queryStringMulti = r:parseargs()
    for queryStringKey, queryStringValue in pairs(queryStringMulti) do
      r:err(queryStringKey .. "," .. queryString[queryStringKey] .. "," .. tostring(queryStringMulti[queryStringKey]) .. "," .. tostring(queryStringValue))
      for multiKey, multiValue in pairs(queryStringMulti[queryStringKey]) do
        r:err(queryStringKey .. "," .. multiKey .. "," .. multiValue)
      end
    end
  return 0
end

ログに記録される項目は、提供された最終参照値に関連する項目のみです。

[Wed Jun 07 10:24:43.923877 2017] [lua:error] [pid 1370:tid 140336118597376] [client 192.168.56.101:43980] ref,30257523,table: 0x7fa264010810
[Wed Jun 07 10:24:43.923948 2017] [lua:error] [pid 1370:tid 140336118597376] [client 192.168.56.101:43980] ref,1,30257523

ご覧のとおり、最初のログ エントリでは、ref の値がテーブルであることを認識していますが、そのテーブルを反復処理すると、最後に提供された値を含む 1 つのエントリしか返されません。また、標準テーブルには、提供された最終値のみが含まれていますが、ここに何があるべきかわからず、興味がありません。

mod_lua のドキュメントに概説されている parseargs の正しい手順に従っていると思いますが、関数に関する限り私の期待を反映していますが、複数値部分を処理する方法の例はありません。

複数値のキーが増分整数である他のテーブルと同じように機能すると仮定しました。

ref の多値テーブルを通過する必要がある他の方法はありますか?

環境の詳細

サーバー ハードウェア - Oracle VirtualBox 5.1.16 r113841 (2 GB RAM、2 コア CPU、32 GB HDD)。

サーバー OS - Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-78-generic x86_64)。

Apache httpd バージョン - サーバー バージョン: Apache/2.4.18 (Ubuntu)、サーバー ビルド: 2017-05-05T16:32:00。ubuntu canonical repo を使用してインストールします。

Web クライアント - クライアントに依存するのではなく、選択してください (curl、wget、firefox 44、chrome、jmeter)

もう少し情報

クエリ文字列に異なるタグを含めると、すべてのタグが処理されますが、ここでも各タグの最後の値のみが保存されます。クエリ文字列:

?ref=12345678&ref=01012052&ref=30257523&dob=01062017&dob=0101970

以下のみがログに記録されます。

[Wed Jun 07 10:35:15.627686 2017] [lua:error] [pid 1369:tid 140336076633856] [client 192.168.56.101:43982] dob,0101970,table: 0x7fa25c0108f0
[Wed Jun 07 10:35:15.627774 2017] [lua:error] [pid 1369:tid 140336076633856] [client 192.168.56.101:43982] dob,1,0101970
[Wed Jun 07 10:35:15.627786 2017] [lua:error] [pid 1369:tid 140336076633856] [client 192.168.56.101:43982] ref,30257523,table: 0x7fa25c010810
[Wed Jun 07 10:35:15.627795 2017] [lua:error] [pid 1369:tid 140336076633856] [client 192.168.56.101:43982] ref,1,30257523

また、r:err を使用してはならないことはわかっていますが、Apache インストールのログ レベルが下がっており、変更できないため、ログを取得したことを確認しました。

apache2 には次のモジュールがロードされています。

 core_module (static)
 so_module (static)
 watchdog_module (static)
 http_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 unixd_module (static)
 access_compat_module (shared)
 alias_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 filter_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 lua_module (shared)
 mime_module (shared)
 mpm_event_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_http_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
4

1 に答える 1