2016-11-06 4 views
3

私はこれがうまくいくと思っていましたが、何らかの理由でauth_basicをスキップし、常に200を返します。同じことが200の301リダイレクトのために入れ替わると同じことが起こります。戻り値が指定されていると、ロケーションブロック内のauth_basicは機能しません。

返信文をコメントアウトしても問題ありません。理想的には、/authエンドポイントだけが認証されると、301は別のパスにリダイレクトされます。

location /auth { 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    auth_basic "Secret"; 

    return 200 'hello'; 
    } 

私に何か不足していますか?

多くのおかげ

FLO

答えて

2

return -directivesは、他のほとんどのディレクティブの前に実行されています。あなたの問題を解決するには次の2つの場所にこれを分割する必要があります。

location /auth { 
    auth_basic_user_file /etc/nginx/.htpasswd; 
    auth_basic "Secret"; 
    try_files DUMMY @return200; 
} 

location @return200 { 
    return 200 'hello'; 
} 

try_files -directiveはauth_basic後に評価されます。 2番目の場所は、try_filesの結果としてのみ評価されます。

+0

よろしくお願いいたします。私はこれを確認するいくつかの文書を見つけようとしましたが、nginxサイトか他の場所でそれを見つけることができませんでした。もし誰かがこれが予想される動作かバグかもしれないと確信する場所があれば?ありがとう。 –

+0

これについての公式の文書は見つかりませんでした。ソースコードはこの動作を確認し、このプレゼンテーションを確認します:http://de.slideshare.net/joshzhu/nginx-internals、スライド37以降を参照してください。 'return'ディレクティブは、書き換えモジュールに属します。また、この記事:http://www.nginxguts.com/2011/01/phases/ – Digitalkapitaen

関連する問題