CentOS7 Nginxのアクセス制限

スポンサーリンク

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を定義しないと正常に動作しませんでした。私のやり方が間違っているのかもしれませんが、勘違いがありましたらご指摘をお願いいたします。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする