2月 012013
 
シェアする

nginx-logoこのサイト、実は最近Apacheからnginxに移行を試みています。Apacheで利用していたBasic認証をnginxでも行いたいなと思って調べてみました。

このサイトはWordPressで公開しておりますので、/wp-admin/ へのアクセスに対してBasic認証を施したいと思います。今回はnginxでのBasic認証を設定してみます。

nginxの設定のうちserver { } で囲われている部分に「/wp-admin/」へアクセスした場合にはBasic認証を書けるような設定を書きます。

1. server{ } の中に location /wp-admin/ {} を使って認証が必要な旨記載します

この設定で「/wp-admin/」へのアクセスを行うときにはBasic 認証が必要になります。

server {
        listen xxx.xxx.xxx.xxx:80;
        root /path/to/DocumentRoot/;
        # ~設定省略~
        location /wp-admin/ {
                auth_basic "admin only";
                auth_basic_user_file /etc/nginx/.htpasswd;
        }
        # ~設定省略~
}

2. /etc/nginx/.htpasswd としてパスワードファイルを作成します。

パスワードファイルはApacheに付属の「htpasswd」コマンドを使って作成できます。

# htpasswd -c /etc/nginx/.htpasswd testuser
New password: パスワードの入力(不可視)
Re-type new password: パスワードの入力(不可視)
Adding password for user testuser
#
# cat /etc/nginx/.htpasswd
testuser:$apr1$4zURgWxS$Orj3Pj3x0h10a7Jwly/ap0
#

ほかには、openssl コマンドを用いて作成することもできます。

# echo "testuser:`openssl passwd -apr1 HereIsYourPassW0rd`" > /etc/nginx/.htpasswd
#
# cat /etc/nginx/.htpasswd
testuser:$apr1$ee5BcGOF$grdhRTxWclCEJBYnXhtPM1
#

後者の方法はコマンド履歴にパスワードが残ります。
その他の作成方法として、htpasswdコマンドがない環境でのパスワードファイル作成に関しては以下URLにまとめられていましたのでご参考にしてください。

How do I generate an .htpasswd file without having Apache tools installed?
http://wiki.nginx.org/Faq#How_do_I_generate_an_.htpasswd_file_without_having_Apache_tools_installed.3F

3. nginxを再起動します

# service nginx restart

4. nginxのアクセスログを確認しながら、/wp-admin/にアクセスします

# tail -f /var/log/nginx/access.log

tail -f はCtrl+Cで終了できます。

正しく認証が通過した場合、アクセスログにはログインユーザ名が記録されますので確認しましょう。

参考:
[wiki.nginx.org] HttpAuthBasicModule
http://wiki.nginx.org/HttpAuthBasicModule

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

  6 コメント

  1. ここにもnginxが・・・。自分のサイトもnginxでwordpressが動かせるようになったんで本格的に移行しようかなとおもっております。

  2. くりくりさん

    nginx+wordpress+VirtualHostってのをやりたいんですが、VirtualHostがうまくいかなくて、今でも実は裏でApache走らせています;^_^A

    わざわざサブドメインの向き先IP変えて、VPSにもとからついてた二つ目の仮想NICでListenさせています(-_-) とほほ

  3. virtualhostで一応ふたつのドメインでうごかしています。サイト表示ができたらいいくらいなんであんまり参考になるとはおもいませんが
    /etc/nginx/conf.d/以下にdefault.confがあるとおもいます。それをコピペして編集すればいけるかなと?
    nginx.confはあんまり手をつけなかったです。

    自分はこのようにしております。

    server {
    listen 80;
    server_name superweibu.mydns.jp http://www.superweibu.mydns.jp;
    if ($http_host = superweibu.mydns.jp) {
    rewrite (.*) http://www.superweibu.mydns.jp$1;
    }

    location / {
    root /home/superweibumydns/public_html;
    index index.html index.php;
    }

    location ~ \.php$ {
    root /home/superweibumydns/public_html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

    phpのlocationにroot、apacheで言う所のDocumentRootをいれないといけないのに気がつくのにえらい時間がかかりました。
    ずーとエラーがでっぱなし・・・。後phpを動かすのにphp-fpmが必要でしたから自分は面倒だったんで、remiを追加してCentOSオリジナルのphpを上書きしました。

  4. […] ;す。 nginxの設定のうちserver { } で囲われて… >>[nginx] BasicAuthentication – Basic認証を実装するの巻 – TrippyBoyの愉快な日々 Author: […]

  5. […] [nginx] BasicAuthentication – Basic認証を実装するの巻 […]

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ