普段の案件ではApacheばかりなので、NGINXに関してはまだまだな筆者ですが、BASIC認証を設置した時に少しトラブりました。
BASIC認証設置前は以下のようにPHPファイルに対するlocationが存在していました。
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
Apache歴が長い筆者は、次のように記述しました。
location ^~ /basic/ {
auth_basic "MemberOnly";
auth_basic_user_file "/path/.htpasswd";
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
結果、/basic/
へのアクセスはBASIC認証が行われるようになりましたが、/basic/
以下のPHPファイルへアクセスすると実行されずにダウンロードされてしまう状態に…。
よく調べてみると、NGINXのlocationはどれか1つに該当すると、他(同評価下のlocation)は無視される仕様なので、以下のような記述にするとうまく動きました。
location ^~ /basic/ {
auth_basic "MemberOnly";
auth_basic_user_file "/path/.htpasswd";
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
なんだかなぁ…。もっとスマートな方法がある気がします。