Webサーバを運用していると特定のディレクトリは特定のIPにしかアクセスさせたくない、といったことは普通にあることです。Nginxでも当然、こういった設定は可能です。
■IPアドレス制限
送信元IPによってアクセス制限を掛ける場合です。これは基本的にディレクトリ単位で行います。下記はディレクトリhogeに対してIP制限をかける場合です。
# vi /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } location /hoge { root /usr/share/nginx/html; allow 127.0.0.1; deny all; } <省略> |
上記はディレクトリhoge配下を127.0.0.1からのみアクセス可としたものです。当初allow,denyだけで良いのかと思いましたが、rootを指定しないと正常に動かなかったのでlocationごとにこれらが必要なのかなと思います。
あまりないかもしれませんが、サーバ全体にかける場合はlocationではなくserver配下に直接かけば良いです。
# vi /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; allow 127.0.0.1; deny all; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } <省略> |
■パスワード制限(BASIC認証)
NginxでBasic認証をかける場合、Apacheと同様に.htpasswdを生成します。これを作成するのに使うコマンドはApacheと同様、htpasswdコマンドになります。このコマンドはhttpd-toolsに含まれるので入っていないければまずこれをインストールします。
# yum install httpd-tools # htpasswd -c /usr/share/nginx/html/.htpasswd hoge New password:[パスワード入力] Re-type new password:[パスワード再入力] Adding password for user hoge |
上記で作成したファイルをNginxの設定ファイルで指定することになります。
# vi /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } location /hoge { root /usr/share/nginx/html; auth_basic "Basic Authentication" auth_basic_user_file /etc/nginx/conf.d/.htpasswd; } <省略> |
Basic認証に関してもIP制限と同様にrootを定義しないと正常に動作しませんでした。私のやり方が間違っているのかもしれませんが、勘違いがありましたらご指摘をお願いいたします。