【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

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認証をかけることです。

設定手順

  1. vagrantfileを編集して、vagrantを立ち上げる
  2. vagrant sshでサーバーに入る
  3. nginxをインストールしていく
  4. Virtualhostを立てていく
  5. basic認証をかけていく

ざっくりと上記のような手順で書いていきますので、もう知っているぜという手順の所は飛ばしても大丈夫です!!

 Vagrantで起動した仮想サーバにSSHでログインしていこう

vagrant sshをするために、apacheのbasic認証の所で行った設定をここでも実施していきます。

local環境内でインターネット接続できるようにするために、vagrantfileを編集をする。

Vagrantfileの一例が以下の設定になっている。

接続するために絶対に必要なのが、

1
config.vm.network "private_network", ip: "192.168.43.20"

となっている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  # -*- 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
   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をする。

1
vagrant up

vagrant upが完了したら、vagrant sshで接続して、

1
vagrant ssh

お察しの通り前回のapacheを使ってbasic認証をかけていく記事とまったく一緒です。

すいません、でもあった方がいいかなと思い、優しい方はありがとうと表面上では思いながらスルーしてくださると大変嬉しいです。。。。
ログインができたらここは成功です。次にnginxをインストールしていきましょう。

nginxをインストールしていこう

前回Apacheをインストールしていくときは、何も考えずにえいっとhttpdをインストールできましたが、nginxさんはそんなに優しいやつではありません。いきなりインストールなんかしようもんなら、そんなものはないとぶった切られます。なので、インストールしていく前に、一苦労していきましょう。

  • yum updateはしたという前提のもと書いていきますので、ご了承ください

まずは、nginx様のためにレポジトリーを作成していきましょう。

1
sudo vi /etc/yum.repos.d/nginx.repo

これでnginx.repoを開くことができたら、エディターの中に以下の設定を記述していきましょう。

1
2
3
4
5
[nginx]
name=nginx repo
gpgcheck=0
enabled=1

上記の記述ができたら、:wqで保存していきましょう。

そして、nginxをインストールしていきましょう。

1
sudo yum install nginx

これでインストールが完了です。問題がなければ、nginxを起動していきましょう。

1
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は作成する必要はありません。

1
mkdir -p /var/www/vhosts/example.com/public_html

作成が完了したら、public_htmlまで移動して、index.htmlを作成していく。

1
sudo vi index.html

中身は任意に記載して、:wqを押して、保存する。

nginxでは、vhostを設定するためにsites-availableとsites-enabledというディレクトリを作成して、その配下に設定する必要がある。この二つのディレクトリは後にシンボリックリンクを設定していく。まずは、上記二つのディレクトリを作成する。

1
mkdir /etc/nginx/sites-available

もう一個も作成する

1
mkdir /etc/nginx/sites-enabled

二つのディレクトリの作成が完了したら、Virtualhost用のconfファイルを作成していく。

今回のドメインは、example.comなので、名前は、example.com.confというファイル名にしていく。

記述は以下のように記載していく。

1
2
3
4
5
6
7
8
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のディレクトリにシンボリックリンクを設定していく。

1
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf

上記で設定したことをnginxにも読み込んでもらうために、nginx.conf内に記述を行っていく。

記述する内容はこちら。

1
include /etc/nginx/sites-enabled/*;

これをnginx.confの下の方に記載する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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を行っていく。

1
nginx -t

これでsyntax okayとconfiguration file is successfulという表示が出れば、問題がないことを確認できる。最後に設定を反映させるために、nginxを再起動していく。

1
sudo systemctl restart nginx

そして、忘れてはならないのが、hostsファイルの編集。

1
任意のIPアドレス example.com

とhostsファイルに追記して、保存する。

*管理者権限で実行しないと設定が反映されません。なので、メモ帳などを管理者権限で実行してから、hostsファイルを開いてください。

これで、http://example.comとブラウザで検索したときに、設定時に記載したものが表示されれば、今回の設定は完了となる。

これでvirtualhostの設定ができたので、basic認証の設定を最後に行っていく。

設定したVhostにbasic認証をかけていこう

Apacheを使用する時は、ht系のものもインストールされているので、何ら問題がない。だが、nginxの場合はht系のツールがインストールされていないので、htpasswdコマンドを使用することができない。なので、最初にそのインストールから行っていく。

1
sudo yum install httpd-tools

インストールが完了したら、htpasswdコマンドを使って、basic認証の準備をしていく。

1
htpasswd -c /var/www/vhosts/example.com/.htpasswd ユーザー名

ユーザー名とパスワードは任意のものを登録していく。

念のために、ユーザー名とパスワードがきちんと作られているかを確認する。

1
cat /var/www/vhosts/example.com/.htpasswd

設定したユーザー名とhash値が表示されれば、ちゃんと設定できていることが分かる。

最後にbasic認証をかけるために、example.com.confにauth_basicとauth_basic_user_fileを追記していく。

1
2
3
4
5
6
7
8
9
10
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認証の設定まで完了となる。

 

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
7
読み込み中...
7 票, 平均: 1.00 / 17
7,214
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

Ken

2022年に新卒でビヨンドに入社
現在システムソリューション部に所属
大学院までは言語学勉強して、インフラエンジニアに挑戦
社内でビヨンド喫茶部という部活を設立して、毎日コーヒー・紅茶いれることにも熱を入れている