2016-06-01 13 views
1

私はNGINXサーバーを持っており、パスワード要件(.htpasswd)にはApache-utilityを使用しています。それは多くの場合、正常に動作します。細かい以下、この作品:NGINX - なぜパスワード認証をバイパスできますか?

example.com/admin 
example.com/admin/ 
example.com/admin/index 

けど... 私はexample.com/admin/index.phpを入力し、すべてのキーを押しで任意のパスワードを入力しないサーバーのショーは、任意のCSSやJSファイルなし(index.phpのだ「中止します」 )。私は私のPHP-FPMが問題だと思います。見てみてください:

location/{ 
    try_files $uri $uri.html $uri/ @extensionless-php; 
    index index.html index.htm index.php; 
} 

location @extensionless-php { 
    rewrite ^(.*)$ $1.php last; 
} 

location /admin { 
    auth_basic "Restricted"; 
    auth_basic_user_file /admin/.htpasswd; 
} 

location ~ \.php$ { 
    fastcgi_pass   127.0.0.1:9000; 
    include     fastcgi_params; 
    fastcgi_param   SCRIPT_FILENAME $document_root$ 
} 
+0

[this](http://nginx.org/en/docs/http/request_processing.html)を参照してください。基本的に、認証は 'location/admin'に適用され、' .php'ファイルは 'location 〜\ .php $ ' –

+0

私は参照してください。しかし、どうすればそれを修正できますか?私は見当もつかない。 –

答えて

1

はちょうどあなたの質問の最後の2つの場所を見て:^~修飾子を追加

location ^~ /admin { 
    auth_basic "Restricted"; 
    auth_basic_user_file /admin/.htpasswd; 

    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     include  fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 
} 

location ~ \.php$ { 
    fastcgi_pass 127.0.0.1:9000; 
    include  fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
} 

location ^~ /adminブロックは、他の正規表現のブロックよりも優先させ(特に既存のlocation ~ \.php$ブロック)。したがって、認証ルールは、/adminで始まるURIに一様に適用されます。詳細は、this documentを参照してください。

location ~ \.php$ブロックがlocation ^~ /adminブロック内に複製され、/adminで始まり、.phpで終わるURIを処理します。

+0

ニース。バグが修正されました。しかし今、彼は常に403禁止されていると言います。私は、ディレクトリのアクセス許可を確認したが、すべての権利。 –

+0

403 URIが( '/ admin'や'/admin/'のような)裸のディレクトリであり、それを解決する' index'や 'try_files'ルールが存在しない場合に発生する可能性があります。 'index ^〜/ admin'ブロックに' index'や 'try_files'を追加して、目的の動作を得ることができます。 –

+0

私はまだ403を試みました。私がファイルにURIを指していても。あなたはなぜアイデアを持っていますか? –

関連する問題