結果的にNginxでのlocationの書き方が問題で起こった事です。
phpMyAdmin/のフォルダに対するアクセス制限が成功したのに、
phpMyAdmin/index.phpにアクセスすると見れてしまう。
ネットを探していた時によく見かけたのが下記の形
listen 80;
server_name [公開ドメイン];
root /var/www/html/;
index index.php index.html index.htm;
location /phpMyAdmin {
allow [接続許可したいIP];
deny all;
}
location ~ \.php$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
まずローカル内[許可しているIP]で
http://hoge/phpMyAdminに接続
...成功
次にiphone[許可していないIP]で
http://hoge/phpMyAdminに接続
...失敗403
結果的にアクセス制御出来てるようなので、一見大丈夫なように見えたのですが・・・
今度はiphone[許可していないIP]から
http://hoge/phpMyAdmin/index.phpに接続
...成功
ん?
・・・んん?
なんで繋がるんだ!?
「ネットに書いてある通りなんだが!」とよくあることを叫びつつ、試行錯誤を繰り返しながら結果的には下のコードでうまくいきました。
listen 80;
server_name [公開ドメイン];
root /var/www/html/;
index index.php index.html index.htm;
location /phpMyAdmin {
allow 127.0.0.1;
deny all;
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_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
いろいろ試した結果
最初の設定はphpMyAdminのフォルダはアクセス制限をかけたが、そのフォルダ内の.phpファイルに対するアクセス自体は
location ~ .php$ {
}
の方が優先されてしまって
.phpファイルのみ参照できるようになっていたみたいです。
なので
location /phpMyAdmin {
の中に
location ~ .php$ {
をネストとして
phpMyAdmin内の.phpファイルにアクセスしたときはphpMyAdminのネストを通るように優先順位を変更しました。
iphoneでアクセスしても無事アクセス制限がかかり、めでたし。