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;
}
Nginx書き換えモジュールには if
ディレクティブ (例についてはリンクされたドキュメントを参照)がありますが、else
はありません。 else
に相当するものはif
で変更されないものすべてです。
if
はserver { }
内で使用できますが、逆は使用できません。すでにサーバーを必要とするリクエストの前にifで条件を比較することすらありません。そこでは、ユーザーエージェントがwget
である(またはそうでない)場合にのみコンテンツを提供できます。
また、if
をlocation
内で使用しないでください。これは、期待どおりに機能しない可能性があるためです( If Is Evil を参照)。
指定された形式では機能しません。HTTPUser-Agentをテストすると、要求がすでに受信されていることが暗示されます。これは、一部のserver
ブロックがすでに定義されている場合にのみ可能です。別の場所で受け取ったリクエストのUser-Agent文字列に応じて、本当に新しいサーバーを起動しますか?
異なるコンテンツを提供するだけの場合は、User-Agentなどのリクエストの部分に応じて、異なるパスなどにリダイレクトします。これは可能です。 http://nginx.org/en/docs/http/ngx_http_rewrite_module.html