nginx confでif / elseステートメントを行う方法は?


9

nginxでこのようなことをすることは可能ですか?

if ( $http_user_agent = "wget" ){
   server {
      listen      11.11.11.11:1111;
      root        /website1/;
      server_name example.com www.example.com;
else 

   server {
      listen      22.22.22.22:22222;
      root        /website2/;
      server_name example2.com www.example2.com;
}

あなたはマップモジュールを見てみたいかもしれません。
gf_

2
あなたは奇妙でまったく意味のない何かを書きました。最初から始めて、どの問題を解決したいですか
Alexey Ten

回答:


9

Nginx書き換えモジュールにはifディレクティブがあります(例については、リンクされたドキュメントを参照してください)else。同等のためにはelseなりに修正されていないものをすべてif

if内部で使用できますserver { }が、逆はできません。すでにサーバーを必要とするリクエストの前にifで条件を比較することすらありません。そこでは、ユーザーエージェントが(またはそうでない)場合にのみコンテンツを提供できますwget

また、期待どおりに動作しない可能性があるため、if内部では使用しlocationないでください(「Is Is Evil」を参照)。


3

指定された形式では機能しません。HTTPUser-Agentをテストすると、要求がすでに受信されていることが暗示されます。これは、一部のserverブロックがすでに定義されている場合にのみ可能です。他の場所で受け取ったリクエストのUser-Agent文字列に応じて、本当に新しいサーバーを起動しますか?

異なるコンテンツを提供したいだけの場合、User-Agentのようなリクエストの部分に応じて異なるパスなどにリダイレクトします。これは、http://nginx.org/en/docs/http/ngx_http_rewrite_moduleなどで可能です。 html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.