Nginxでベーシック認証をかける方法!

Nginxでベーシック認証を設定するときは、直接、 /etc/nginx/sites-available/default に設定を書く必要があります。
※ Nginxは 「.htaccess」 が使えません。

1. サイト設定ファイルを修正

21-22行目の2行を追加します。"Auth" は、"My Site" などに置き換えても大丈夫です。
# vi /etc/nginx/sites-available/default を修正します。
下記は既に修正済みです。

# You may add here your
server {
	listen 80;
	server_name example.com;
	rewrite ^/(.*) http://www.example.com/$1 permanent;
}

server {
	listen 80;

	root /home/hoge/example.com/wordpress;
	index index.php index.html index.htm;

	server_name www.example.com;

	access_log /var/log/nginx/example.com-access.log;
	error_log /var/log/nginx/example.com-error.log;

	location / {

		auth_basic "Auth";
		auth_basic_user_file $document_root/.htpasswd;

		rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;
		rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
		rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
		rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;

		if (-f $request_filename) {
			expires 30d;
			break;
		}

		if (!-e $request_filename) {
			rewrite ^.+?($/wp-.*) $1 last;
			rewrite ^.+?(/.*\.php)$ $1 last;
			rewrite ^ /index.php last;
		}
	}

	location /wp-admin {
		set $do_not_cache 1;
	}

	set $do_not_cache 1;

	location ~ \.php$ {
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
		fastcgi_pass_header "X-Accel-Redirect";
		fastcgi_pass_header "X-Accel-Expires";
		fastcgi_no_cache $do_not_cache;
		fastcgi_cache_bypass $do_not_cache;
		fastcgi_cache wpcache;
		fastcgi_cache_key "$scheme://$host$request_uri";
		fastcgi_cache_valid 200 10m;
		fastcgi_cache_valid 404 1m;
	}

	location ~ \.(jpg|png|gif|swf|jpeg|ico)$ {
		expires 30d;
	}

	location ~ \.(css|js)$ {
		charset UTF-8;
		expires 30d;
	}

	location = /favicon.ico {
		log_not_found off;
		access_log off;
	}

	location = /robots.txt {
		log_not_found off;
		access_log off;
	}

	location ~ /(\.ht|\.user.ini|\.git|\.hg|\.bzr|\.svn) {
		deny  all;
	}

	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
		root /usr/share/nginx/html;
	}
}

今回は、サイト全体がベーシック認証の対象になりますが、location /wp-admin { の中にベーシック認証の記述を書けば、WordPressの管理画面にベーシック認証を設定することが出来ます。特定のディレクトリだけも可能です。

2. パスワードファイルの作成と設置

Nginxは、パスワードファイルを作成するツールがありませんので、裏技を使ってパスワードファイルを作成します。

// パスワードファイルの作成(ユーザー:hoge パスワード:password)
$ printf "hoge:$(openssl passwd -crypt password)\n" >> ~/example.com/.htpasswd

パスワードファイル作成は、WEBサイトでも作成が出来ます。ベーシック認証のパスワード生成ツールで、パスワードファイルを作成してFTPでアップロードしてください。複数のユーザーとパスワードも一度で作れる優れたサイトです。

これでベーシック認証の設定は完了です!

サイトにアクセスすると認証画面が出るので、設定したユーザー名とパスワードを入力してログインが出来るか試してくださいね~。

読んで頂いて有り難うございます!