Nginxを使ってBasic認証してみた
目次
こんにちは、けんです。
前回はapacheを使ってbasic認証をしていきました。前回のブログでnginxでもbasic認証をすると予告したので、今回の記事ではnginxでのbasic認証の設定の仕方について執筆していけたらなと思います。今回も毎度のことvagrantを用いて、nginxのインストールから、Virtualhostの立て方、basic認証のかけ方まで一挙に紹介していけたらと思っています。ぜひ最後までスクロールをシューっとしていただけたらと思います。
今回利用した環境とバージョン
virtualbox バージョン 6.1
vagrant バージョン 2.2.19
centos/7
nginx バージョン nginx/1.23.1
今回のブログのゴールと手順
今回のゴール
今回のブログのゴールは、nginxで設定した仮想ホストのページにbasic認証をかけることです。
設定手順
- vagrantfileを編集して、vagrantを立ち上げる
- vagrant sshでサーバーに入る
- nginxをインストールしていく
- Virtualhostを立てていく
- basic認証をかけていく
ざっくりと上記のような手順で書いていきますので、もう知っているぜという手順の所は飛ばしても大丈夫です!!
Vagrantで起動した仮想サーバにSSHでログインしていこう
vagrant sshをするために、apacheのbasic認証の所で行った設定をここでも実施していきます。
local環境内でインターネット接続できるようにするために、vagrantfileを編集をする。
Vagrantfileの一例が以下の設定になっている。
接続するために絶対に必要なのが、
config.vm.network "private_network", ip: "192.168.43.20"
となっている。
# -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure("2") do |config| # Every Vagrant development environment requires a box. You can search for # boxes at https://vagrantcloud.com/search. config.vm.box = "centos/7" # Create a forwarded port mapping which allows access to a specific port # within the machine from a port on the host machine. In the example below, # accessing "localhost:8080" will access port 80 on the guest machine. # NOTE: This will enable public access to the opened port config.vm.network "forwarded_port", guest: 80, host: 8080 # Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network "private_network", ip: "192.168.43.20" end
編集が終了したら、vagrant upをする。
vagrant up
vagrant upが完了したら、vagrant sshで接続して、
vagrant ssh
お察しの通り前回のapacheを使ってbasic認証をかけていく記事とまったく一緒です。
すいません、でもあった方がいいかなと思い、優しい方はありがとうと表面上では思いながらスルーしてくださると大変嬉しいです。。。。
ログインができたらここは成功です。次にnginxをインストールしていきましょう。
nginxをインストールしていこう
前回Apacheをインストールしていくときは、何も考えずにえいっとhttpdをインストールできましたが、nginxさんはそんなに優しいやつではありません。いきなりインストールなんかしようもんなら、そんなものはないとぶった切られます。なので、インストールしていく前に、一苦労していきましょう。
- yum updateはしたという前提のもと書いていきますので、ご了承ください
まずは、nginx様のためにレポジトリーを作成していきましょう。
sudo vi /etc/yum.repos.d/nginx.repo
これでnginx.repoを開くことができたら、エディターの中に以下の設定を記述していきましょう。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
上記の記述ができたら、:wqで保存していきましょう。
そして、nginxをインストールしていきましょう。
sudo yum install nginx
これでインストールが完了です。問題がなければ、nginxを起動していきましょう。
sudo systemctl start nginx
最後にhttp://localhost:8080と入力して、いつものnginxのページが表示されたら、nginxのインストール及び、立ち上げは完了です。
次にVirtualhostを作成していきましょう。
Virtualhostを作成していこう(*少しめんどう)
最初にVirtualhost用のドキュメントルートを作成していく。(Virtualhost = vhostの意味で記載することもあります。)
*今回はcentoOSを使用しているので、sites-availableとsites-enabledが初期設定で存在しないので作成する必要があります。けれども、debian系のOSを使用する場合はapacheの慣習に習って存在するので、sites-availableとsites-enabledは作成する必要はありません。
mkdir -p /var/www/vhosts/example.com/public_html
作成が完了したら、public_htmlまで移動して、index.htmlを作成していく。
sudo vi index.html
中身は任意に記載して、:wqを押して、保存する。
nginxでは、vhostを設定するためにsites-availableとsites-enabledというディレクトリを作成して、その配下に設定する必要がある。この二つのディレクトリは後にシンボリックリンクを設定していく。まずは、上記二つのディレクトリを作成する。
mkdir /etc/nginx/sites-available
もう一個も作成する
mkdir /etc/nginx/sites-enabled
二つのディレクトリの作成が完了したら、Virtualhost用のconfファイルを作成していく。
今回のドメインは、example.comなので、名前は、example.com.confというファイル名にしていく。
記述は以下のように記載していく。
server { listen 80; servername example.com; location / { root/var/www/vhosts/example.com/public_html; index index.html index.php; } }
記述できたら、:wqで保存していく。そして、シンボリックでsites-availableのディレクトリとsites-enabledのディレクトリにシンボリックリンクを設定していく。
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf
上記で設定したことをnginxにも読み込んでもらうために、nginx.conf内に記述を行っていく。
記述する内容はこちら。
include /etc/nginx/sites-enabled/*;
これをnginx.confの下の方に記載する。
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/sites-enabled/*; #追記した箇所 include /etc/nginx/conf.d/*.conf; }
これで設定は完了したので、syntax checkを行っていく。
nginx -t
これでsyntax okayとconfiguration file is successfulという表示が出れば、問題がないことを確認できる。最後に設定を反映させるために、nginxを再起動していく。
sudo systemctl restart nginx
そして、忘れてはならないのが、hostsファイルの編集。
任意のIPアドレス example.com
とhostsファイルに追記して、保存する。
*管理者権限で実行しないと設定が反映されません。なので、メモ帳などを管理者権限で実行してから、hostsファイルを開いてください。
これで、http://example.comとブラウザで検索したときに、設定時に記載したものが表示されれば、今回の設定は完了となる。
これでvirtualhostの設定ができたので、basic認証の設定を最後に行っていく。
設定したVhostにbasic認証をかけていこう
Apacheを使用する時は、ht系のものもインストールされているので、何ら問題がない。だが、nginxの場合はht系のツールがインストールされていないので、htpasswdコマンドを使用することができない。なので、最初にそのインストールから行っていく。
sudo yum install httpd-tools
インストールが完了したら、htpasswdコマンドを使って、basic認証の準備をしていく。
htpasswd -c /var/www/vhosts/example.com/.htpasswd ユーザー名
ユーザー名とパスワードは任意のものを登録していく。
念のために、ユーザー名とパスワードがきちんと作られているかを確認する。
cat /var/www/vhosts/example.com/.htpasswd
設定したユーザー名とhash値が表示されれば、ちゃんと設定できていることが分かる。
最後にbasic認証をかけるために、example.com.confにauth_basicとauth_basic_user_fileを追記していく。
server { listen 80; servername example.com; location / { root /var/www/vhosts/example.com/public_html; index index.html index.php; auth_basic auth_nginx_test; auth_basic_user_file /var/www/vhosts/example.com/.htpasswd; } }
この記述を記載したら、nginxを再起動する。そして、basic認証がかかっていれば、ユーザー名とパスワードが求められる。
これでnginxでもbasic認証の設定まで完了となる。