2017-11-08 14 views
2

私は直面している問題の例を見つけようとしましたが、これまで失敗しました。Nginxサーバー変数

nginxの設定(luaも含めることができます)では、同じサーバー内の複数の場所にある変数にアクセスしたいと考えています。つまり、私もそれを変更できるようにしたいと言いました。たとえば、私がこれを行う場合:

server { 
    set $asleep = 0; 

    location /go_to_sleep { 
    set $asleep = 1; 
    echo "sleepy"; 
    } 

    location /status { 
    echo "are we asleep? $asleep"; 
    } 
} 

基本的に私はparamsを使うことができません。私が変更できるローカル変数を持つ方法が欲しいです。私が持っている問題は、/ go_to_sleepエンドポイントに何度も何回かヒットした場合でも、/ statusは常に$ asleepを0として報告するということです。$ sleepは$ /level_sleepのロケーションエンドポイントに対してのみローカルに変更されているためです。私もluaブロックを使ってみましたが、同じ出力が得られます。

単にそれが可能ではないのか、誰かがこのようなことをどうやって動かせるように助けてくれるのだろうかと思います。

答えて

0

Data Sharing within an Nginx Workerは、nginxワーカー内で(明らかに記載されているように)動作します。もしあなたが望むものなら、ポール・クルチェンコの答えを見てください。

しかし、あなたは労働者全体にグローバルフラグが必要な場合は完璧ですし、私がまさに必要ngx.shared.DICT API

http { 
    lua_shared_dict my_global_flags 10m; 

    server { 
     listen 80; 

     location = /go_to_sleep { 
      content_by_lua_block { 
       local my_global_flags = ngx.shared.my_global_flags 
       my_gobal_flags:set("asleep" , true) 
       ngx.say("sleepy") 
      } 
     } 

     location /status { 
      content_by_lua_block { 
       local my_global_flags = ngx.shared.my_global_flags 
       ngx.say("are we asleep ", my_gobal_flags:get("asleep")) 
      } 
     } 
    } 
} 
+0

を使用することができます。ポール私はあなたの提案を試して、それは動作しましたが、これは私のために勝つので、任意のLUAファイルを持っている私の必要性を削除します。両方ともありがとうございます – godspeed20

+0

共有ディクショナリとper-module-stateの使用には大きな違いがあります。nginxワーカーが複数ある場合、すべてのnginxワーカーはすべてのロード済みモジュールに独自のコピーを持っているため、最後の方法は機能しません。/go_to_sleepyリクエストはワーカー1によって処理されることがありますが、/ statusリクエストは他のワーカーによって処理される可能性があります。私にとっては、luaモジュールを必要としないためではなく、選択した共有辞書の理由のように見えます。 –

0

Data Sharing within an Nginx Workerに勧告を考えるありがとう、私はその例に示すと説明したようにあなたは、データ値を共有するために、モジュールの使用に切り替える必要があるかもしれないと思います。このSOの質問とその回答とその例も関連性があります。

関連する問題