show log include yunabe

勉強したことの復習を兼ねて、IT関係(主にネットワーク/サーバ)についてまとめてます。

nginxにて特定IPのみベーシック認証を適用しない方法

概要

自分のWebサーバにログインする際、自宅からやVPNからのアクセスは認証を無しにするが、外部からはアクセスをさせたくない場合の設定です。
ip filter の要領でnginxにも設定することができます。
nginxのインストールについてはこちら↓
yunabe.hatenablog.com

nginxのコンフィグを変更します

vi /etc/nginx/conf.d/default.conf
以下のコンフィグではベーシック認証はbase64の平文で認証されるため、SSL通信で暗号化しベーシック認証をかけています。

server {
    listen 443 default ssl;
    ssl on;
    server_name            xxx.com;
    ssl_certificate      /etc/nginx/conf.d/server.crt;
    ssl_certificate_key  /etc/nginx/conf.d/server.key;
    client_max_body_size 100M;

    location / {
        root   /usr/share/nginx/html;
        index  index.php;
        satisfy any;           # ※1
        allow x.x.x.x/32;    # ※2
        deny all;             # ※3
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/.htpasswd;
以下略....

※1 satisfy anyを指定することでIPかベーシック認証となる(ないとIPかつベーシック認証)
※2 許可するソースIPアドレスを記載 試していないが、おそらく/32じゃなく/24等ネットワークでも指定できそう
※3 暗黙のdenyはないので明示的に拒否する

変更後nginxを再起動

service nginx restart