BIND 9 install & setup

CentOS 7 で BIND 9.9.4 の DNS ネームサーバ環境を構築〜自宅サーバ|ローカル環境

connect-internet BIND 9
スポンサーリンク

前回の記事 で取得していた naruhoto.cf というドメインを実際に使える状態まで設定を行い、最終的には https://www.naruhodo.cf へブラウザでアクセスできるように設定します。

  1. 概要
  2. BIND 9と Apache のバーチャルホストの設定の流れ
  3. 準備&確認
    1. CentOS7 サーバへ SSH アクセス
  4. BIND9 をインストール
    1. インストールされた BIND9 パッケージを確認
  5. BIND 9 を設定
    1. 設定ファイル ( /etc/named.conf ) を編集します。
    2. naruhodo.cf のゾーン ( Zone ) 定義ファイル名を作成
    3. naruhodo.cf のゾーン ( Zone ) データベースファイルを作成
  6. DNS ルートゾーンファイル ( named.ca ) を最適化
    1. Apache のバーチャルホスト( VirtualHost ) を設定
    2. 確認します。
  7. DNS ルートゾーンファイルの自動更新を設定
  8. BIND9 デーモンを起動
    1. BIND9 のプロセス状態を確認します。(選択)
  9. Firewalld で 53/TCP と 53/UDP ポートをオープン
    1. BIND9 デーモンが正常起動中であれば、53/TCP と 53/UDP ポートをオープンします。
    2. 確認します。(選択)
  10. 問い合せ先 DNS サーバを自分自身に変更
  11. BIND9 の動作確認
    1. リッスンしているプロセスを確認します。
    2. nslookup で確認します。
    3. dig で確認します。
  12. オープンリゾルバを確認
  13. Apache のバーチャルホスト( VirtualHost ) を設定
    1. 前提
  14. ドキュメントルートディレクトリを作成
  15. HTTP|ネームベースのバーチャルホストを設定
  16. HTTPS | ネームベースのバーチャルホストを設定
  17. バーチャルホストの設定を確認
  18. Apache の config ファイル(httpd.conf)の設定を確認
  19. Apache/httpd を再起動
  20. サイト ( naruhodo.cf ) 確認用のテストページを作成
  21. サイト ( naruhodo.cf ) を確認
    1. 確認方法1:ブラウザ ( Chrome ) でアクセス
    2. 確認方法2:無料ウェブサイトテストサイトを利用
    3. 確認方法3:curl コマンドを利用
  22. テストページを削除

概要

筆者の自宅サーバは NAT (Network Address Translation) 環境であり内部用 IP アドレスと外部用 IP アドレスが異なるネットワークになっているので DNS サーバも両方対応できるよう構成します。

  • 内部向け DNS サーバ
  • 外部向け DNS サーバ

DNS サーバの設定後、動作確認を行います。その後、ApacheVirtualHost に naruhodo.cf ドメインを追加しブラウザでアクセスしてコンテンツが正常に見られるかまで行います。

BIND 9と Apache のバーチャルホストの設定の流れ

  • BIND9 グローバル設定を行うディレクトリ(❶):/etc/、/etc/named/
  • ドメインの詳細設定を行うディレクトリ(❷):/var/named/
BIND 9 環境構築
  • 流れ1
    必要なパッケージをインストール
  • 流れ
    設定ファイルを編集 (❶)
  • 流れ
    naruhodo.cf のゾーン ( Zone ) 定義ファイルを作成 (❶)
  • 流れ
    naruhodo.cf のゾーン ( Zone ) データベースファイルを作成 (❷)
  • 流れ
    DNS ルートゾーンファイル最適化 (❷)
  • 流れ
    DNS ルートゾーンファイル自動更新設定 (❷)
  • 流れ
    BIND9 デーモンを起動
  • 流れ
    Firewalld 設定
  • 流れ
    問い合せ先 DNS サーバを自分自身に変更
  • 流れ 10
    動作確認
Apache のバーチャルホスト ( VirtualHost ) を設定
  • 流れ
    ドキュメントルートディレクトリを作成
  • 流れ
    HTTP | ネームベースのバーチャルホストを設定
  • 流れ
    バーチャルホストの設定を確認
  • 流れ
    Apache の config ファイル ( httpd.conf ) の設定を確認
  • 流れ
    Apache/httpd を再起動
  • 流れ
    サイト ( naruhodo.cf ) 確認用のテストページを作成
  • 流れ
    サイト ( naruhodo.cf ) を確認
  • 流れ
    テストページを削除(終了)

準備&確認

  • 固定 IP アドレス環境で独自ドメインを取得しておく必要があります。
  • 外部向け DNS サーバは固定 IP アドレス環境のみです。
  • ここで使う IP アドレスの例(ご自身の IP アドレスを使うこと)
    内部ネットワーク:192.168.1.0/24
    外部ネットワーク:123.123.123.0/24
    サーバ IP アドレス:192.168.1.10(内部)/ 123.123.123.10(外部)
    作業PC:192.168.1.11
  • 対象システム仕様
    サーバ:CentOS 7.6
    BIND9:bind 9.9.4
    Apache : Apache/2.4.39 (Unix)

CentOS7 サーバへ SSH アクセス

DNS サーバへアクセスします。

try🐶everything ~$ ssh naru@centos7 -p1999
naru@centos7's password:
Last login: Wed Jun  5 10:27:07 2019 from 192.168.1.11

[naru@centos7 ~]$ sudo su - 
[sudo] naru のパスワード: 
最終ログイン: 2019/06/05 (水) 10:27:22 JST日時 pts/0 

BIND9 をインストール

[root@centos7 ~]# yum -y install bind bind-chroot bind-utils  ◀︎ bind-utilsはdig、dnslookup などを実行するため必要です。

インストールされた BIND9 パッケージを確認

[root@centos7 ~]# yum list installed | grep bind
bind.x86_64                           32:9.9.4-73.el7_6          @updates
bind-chroot.x86_64                    32:9.9.4-73.el7_6          @updates
bind-libs.x86_64                      32:9.9.4-73.el7_6          @updates
bind-libs-lite.x86_64                 32:9.9.4-73.el7_6          @updates
bind-license.noarch                   32:9.9.4-73.el7_6          @updates
bind-utils.x86_64                     32:9.9.4-73.el7_6          @updates
rpcbind.x86_64                        0.2.0-47.el7               @base

BIND 9 を設定

設定ファイル ( /etc/named.conf ) を編集します。

[root@centos7 ~]# cat /etc/named.conf
...
options {
#listen-on port 53 { 127.0.0.1; }; ◀︎ 行頭の#を消すと内部向けのみになるので付けたままにしておく。
#listen-on-v6 port 53 { ::1; }; ◀︎ IPv6 は使わないのでこれも付けたままに。
version     "unknown"; ◀︎ bind9 のバージョンを非表示
directory   "/var/named";
dump-file   "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query     {
localhost; localnets; ◀︎ 内部ネットワーク
123.123.123.10; ◀︎ DNS サーバ
};

recursion yes; ◀︎ 再帰問い合せ機能を有効化(内部向け DNS サーバとして動作)

//DNSSEC 無効化  ◀︎ 
#dnssec-enable yes;
#dnssec-validation yes;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;

/* Google もしくは Freenom World を設定 */  ◀︎ 
forwarders {
8.8.8.8; 8.8.4.4;  ◀︎ Google
// or
80.80.80.80; 80.80.81.81; ◀︎ freenom world
};
...

};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
category lame-servers { null; };   ◀︎ 追加
};

/*
内部向け設定
*/
//追加(ここから)
view "internal" {
match-clients { localnets; };
match-destinations { localnets; };
//追加(ここまで)

...

include "/etc/named/named.naruhodo.cf.zone"; ◀︎ 追加(内部向けゾーン定義ファイルを指定)
};


/*
外部向け設定(固定IPアドレス環境のみ)
*/
//追加(ここから)
view "external" {
match-clients { any; };
match-destinations { any; };
include "/etc/named/named.naruhodo.cf.zone.wan"; ◀︎ 追加(外部向けゾーン定義ファイルを指定)
};
//追加(ここまで)

naruhodo.cf のゾーン ( Zone ) 定義ファイル名を作成

設定ファイルで指定した2つのゾーン ( Zone ) ファイルを作成します。(ファイル名は任意)

  • 内部向けゾーンファイル:/etc/named/named.naruhodo.cf.zone
  • 外部向けゾーンファイル:/etc/named/named.naruhodo.cf.zone.wan

内部向けゾーン ( Zone ) 定義ファイルを作成します。

[root@centos7 named]# cat /etc/named/named.naruhodo.cf.zone
zone "naruhodo.cf" {
type master;
file "naruhodo.cf.db"; ◀︎ 内部向けゾーンデータベースファイルを指定
};
zone "1.168.192.in-addr.arpa" {
type master;
file "1.168.192.in-addr.arpa.db";
};
  • 別のファイルに zone “1.168.192.in-addr.arpa” {…} までの設定がある場合、記入は不要です。
  • 1.168.192.in-addr.arpa.db ファイルは、
    1つのネットワークあたりに1個のみ作成できます。
    各ドメインの設定はファイル内の PTR レコードに追加します。

外部向けゾーン ( Zone ) 定義ファイルを作成

[root@centos7 named]# vi /etc/named/named.naruhodo.cf.zone.wan
zone "naruhodo.cf" {
type master;
file "naruhodo.cf.db.wan"; ◀︎ 外部向けゾーンデータベースファイルを指定
allow-query { any; };
allow-transfer {
123.123.123.10   ◀︎ DNSサーバ IP アドレス
};
notify yes;
};

naruhodo.cf のゾーン ( Zone ) データベースファイルを作成

ゾーン ( Zone ) 定義ファイルで指定した2つのゾーン ( Zone ) データベースファイルを作成します。(ファイル名は任意)

  • 内部向けゾーンデータベースファイル:/var/named/naruhodo.cf.db、1.168.192.in-addr.arpa.db
  • 外部向けゾーンデータベースファイル:/var/named/naruhodo.cf.db.wan

内部向け正引きゾーンデータベース(ドメイン名 ⇢ IP アドレス)を作成します

[root@centos7 named]# vi /var/named/naruhodo.cf.db
$TTL    86400
@   IN  SOA naruhodo.cf.    root.naruhodo.cf.(
    2019051222 ; Serial
    28800      ; Refresh  ◀︎ 値を zero にすると変更内容がすぐ反映されます。
    14400      ; Retry
    3600000    ; Expire
    86400 )    ; Minimum
IN  NS      ns1.naruhodo.cf.
IN  NS      ns2.naruhodo.cf.
IN  MX  10  smtp.naruhodo.cf.
ns1 IN  A       192.168.1.10
ns2 IN  A       192.168.1.10
smtp    IN  A       192.168.1.10
@   IN  A       192.168.1.10
*   IN  A       192.168.1.10

内部向け逆引きゾーンデータベース( IP アドレス ⇢ ドメイン名)を作成します

[root@centos7 named]# vi /var/named/1.168.192.in-addr.arpa.db
$TTL    86400
@   IN  SOA naruhodo.cf.  root.naruhodo.cf.(
    2019051223 ; Serial
    28800      ; Refresh
    14400      ; Retry
    3600000    ; Expire
    86400 )    ; Minimum
IN  NS      naruhodo.cf.
10 IN  PTR     naruhodo.cf.

外部向け正引きゾーンデータベース(ドメイン名 ⇢ IP アドレス)を作成します

[root@centos7 named]# cat naruhodo.cf.db.wan
$TTL    86400
@   IN  SOA ns1.naruhodo.cf.    root.naruhodo.cf.(
            2019051321 ; Serial
            28800      ; Refresh
            7200       ; Retry
            2419200    ; Expire
            86400 )    ; Minimum
IN  NS      ns1.naruhodo.cf.
IN  NS      ns2.naruhodo.cf.
IN  MX  10  smtp.naruhodo.cf.
ns1 IN  A       123.123.123.10
ns2 IN  A       123.123.123.10
@   IN  A       123.123.123.10
www     IN      CNAME           naruhodo.cf.
smtp    IN  A       123.123.123.10
mail    IN  A       123.123.123.10
naruhodo.cf.    IN  TXT "v=spf1 ip4:123.123.123.10 ~all" ;Only, Mail Server

DNS ルートゾーンファイル ( named.ca ) を最適化

Apache のバーチャルホスト( VirtualHost ) を設定

[root@centos7 named]# dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca

確認します。

[root@centos7 named]# cat /var/named/chroot/var/named/named.ca

DNS ルートゾーンファイルの自動更新を設定

毎月自動更新するスクリプトを作成します。
centossrv.comさんのスクリプトのまんまです。(大変お世話になります!)

[root@centos7 named]# vi /etc/cron.monthly/named.root_update
#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors

if [ $? -eq 0 ]; then
sort_new=`mktemp`
sort_old=`mktemp`
diff_out=`mktemp`
sort $new > $sort_new
sort /var/named/chroot/var/named/named.ca > $sort_old
diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
if [ $? -ne 0 ]; then
(
echo '-------------------- old named.root --------------------'
cat /var/named/chroot/var/named/named.ca
echo
echo '-------------------- new named.root --------------------'
cat $new
echo '---------------------- difference ----------------------'
cat $diff_out
) | mail -s 'named.root updated' root
cp -f $new /var/named/chroot/var/named/named.ca
chown named. /var/named/chroot/var/named/named.ca
chmod 644 /var/named/chroot/var/named/named.ca
which systemctl > /dev/null 2>&1
if [ $? -eq 0 ]; then
systemctl restart named-chroot > /dev/null
else
/etc/rc.d/init.d/named restart > /dev/null
fi
fi
rm -f $sort_new $sort_old $diff_out
else
cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors

BIND9 デーモンを起動

CentOS7 ではデフォルトで BIND を chroot 化します。

※ chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。(wikiより)

named-chroot デーモンを使って BIND 設定に必要な /etc/named*、/var/named/* などを /var/named/chroot 以下へ自動でマウント・アンマウント ( ON / OFF ) してくれます。
プロセスがルートディレクトリ ( / ) ではなく、/var/named/chroot だけにアクセスできるように権限を制御して、ハッキングなどのセキュリティ事故からルートディレクトリ ( / ) を守るために使ったりします。

[root@centos7 named]# systemctl start named-chroot  ◀︎ BIND9 自動起動
[root@centos7 named]# systemctl enable named-chroot ◀︎ BIND9 自動起動設定 

BIND9 のプロセス状態を確認します。(選択)

Active: active (running)…のように表示されると正常動作中!
(エラーが出ると、Active: failed (Result: exit-codeのように failed が表示される)

[root@centos7 named]# systemctl status named-chroot

Firewalld で 53/TCP と 53/UDP ポートをオープン

※ ここはファイアウォール ( firewalld ) を適用している前提です。

BIND9 デーモンが正常起動中であれば、53/TCP と 53/UDP ポートをオープンします。

[root@centos7 named]# firewall-cmd --add-service=dns --zone=public --permanent
[root@centos7 named]# firewall-cmd --reload  ◀︎ 再起動

確認します。(選択)

表示される内容はご自身の環境によって異なります。dns が表示されれば問題ないです。より詳しく見たいなら、firewall-cmd –list-all を打って見てください。

[root@centos7 named]# firewall-cmd --list-service
samba http dns smtp smtps ssh https imaps

問い合せ先 DNS サーバを自分自身に変更

[root@centos7 ~]# cat /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8   ◀︎ localhost がダメの場合働くように。

BIND9 の動作確認

リッスンしているプロセスを確認します。

[root@centos7 ~]# netstat -anp |grep LISTEN |grep named
tcp        0      0 123.123.123.10:53        0.0.0.0:*               LISTEN      30434/named
tcp        0      0 192.168.1.10:53           0.0.0.0:*               LISTEN      30434/named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      30434/named

nslookup で確認します。

自分自身 ( DNS サーバ)から:プライベット側

[root@centos7 named]# nslookup
> naruhodo.cf     ◀︎ 正引き
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   naruhodo.cf
Address: 192.168.1.10 ◀︎ 正引き(結果)
> 192.168.1.10    ◀︎ 逆引き
Server:     127.0.0.1
Address:    127.0.0.1#53

10.1.168.192.in-addr.arpa    name = naruhodo.cf. ◀︎ 逆引き(結果)
>
> www.google.com  ◀︎ 外部サーバ(正引き)
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer:
Name:   www.google.com
Address: 216.58.197.196  ◀︎ 外部サーバ(正引き結果)
>
> 216.58.197.196   ◀︎ 外部サーバ(逆引き)
Server:     127.0.0.1
Address:    127.0.0.1#53

Non-authoritative answer: ◀︎ 外部サーバ(以下、逆引き結果)
196.197.58.216.in-addr.arpa name = nrt13s48-in-f196.1e100.net.
196.197.58.216.in-addr.arpa name = nrt13s48-in-f4.1e100.net.
...
>
> exit

クライアント ( 作業PC ) から:グローバル側

try🐶everything ~$ nslookup
> naruhodo.cf  ◀︎ 正引き
Server:     192.168.11.1
Address:    192.168.11.1#53

Non-authoritative answer:
Name:   naruhodo.cf
Address: 123.123.123.10  ◀︎ 正引き(結果)・グローバル IP アドレス
>

dig で確認します。

自分自身 ( DNSサーバ ) から:プライベット側

[root@centos7 named]# dig naruhodo.cf  ◀︎ 正引き

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> naruhodo.cf
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41750
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;naruhodo.cf.           IN  A

;; ANSWER SECTION:
naruhodo.cf.        86400   IN  A   192.168.1.10  ◀︎ 正引き(結果)

;; AUTHORITY SECTION:
naruhodo.cf.        86400   IN  NS  ns1.naruhodo.cf.
naruhodo.cf.        86400   IN  NS  ns2.naruhodo.cf.

;; ADDITIONAL SECTION:
ns1.naruhodo.cf.    86400   IN  A   192.168.1.10
ns2.naruhodo.cf.    86400   IN  A   192.168.1.10

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 05 18:08:23 JST 2019
;; MSG SIZE  rcvd: 124


[root@centos7 named]# dig -x 192.168.1.10  ◀︎ 逆引き

; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -x 192.168.1.10
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25554
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;10.1.168.192.in-addr.arpa.  IN  PTR

;; ANSWER SECTION:
10.1.168.192.in-addr.arpa. 86400 IN  PTR naruhodo.cf. ◀︎ 逆引き(結果)

;; AUTHORITY SECTION:
1.168.192.in-addr.arpa.   86400   IN  NS  naruhodo.cf.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Jun 05 18:08:38 JST 2019
;; MSG SIZE  rcvd: 121

[root@centos7 named]#

クライアント ( 作業PC ) から:グローバル側

try🐶everything ~$ dig naruhodo.cf  ◀︎ 正引き

; <<>> DiG 9.10.6 <<>> naruhodo.cf
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6862
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;naruhodo.cf.           IN  A

;; ANSWER SECTION:
naruhodo.cf.        86400   IN  A   123.123.123.10  ◀︎ 正引き(結果)

;; Query time: 159 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Wed Jun 05 18:11:36 JST 2019
;; MSG SIZE  rcvd: 56

try🐶everything ~$ 

オープンリゾルバを確認

オープンリゾルバ (外部の不特定の IP アドレスからの再帰的な問い合わせを許可している DNS サーバ) となっているかを確認します。
※ 詳細はこちら、オープンリゾルバ確認サイト

NOT open が表示されたらOKです!

[root@centos7 named]#
[root@centos7 named]# wget -qO - http://www.openresolver.jp/cli/check.html
Configured DNS server: [NOT open] 124.124.124.11(124.124.124.11)
Source IP address: [NOT open] 123.123.123.10(123.123.123.10.static.zt.jp)
[root@centos7 named]#

ここまで DNS サーバの設定・確認が完了しました。

次は Apache の VirtualHost を設定します。

Apache のバーチャルホスト( VirtualHost ) を設定

Apache はバーション 2.4.39 で TLS 1.3・HTTP/2 などに対応済みです。

前提

既にメインサイトを運営中、新規サイトを追加する
・メインサイト:https://jacepark.com
・・ドキュメントルート:/usr/local/apache2/htdocs
・・ログファイル:/usr/local/apache2/logs/access.log、error.log

・新規サイト:https://naruhodo.cf
・・ドキュメントルート:/usr/local/apache2/htdocs/naruhodo.cf
・・ログファイル:/usr/local/apache2/logs/access.log、error.log

ドキュメントルートディレクトリを作成

[root@centos7 ~]# mkdir /usr/local/apache2/htdocs/naruhodo.cf

HTTP|ネームベースのバーチャルホストを設定

ファイルに書かれた順にパーシングされますので、メインホストの設定は先頭に置きましょう。

最低限、どのホストが扱われるかを示す ServerName ディレクティブと、 そのホスト用のコンテンツがファイルシステム上のどこにあるかを示す DocumentRoot ディレクティブを 書く必要があります。

既にあるウェブサーバにバーチャルホストを追加する場合、 既存のウェブサーバに対しても ブロックを作らなければなりません。このバーチャルホストの ServerName と DocumentRoot は、グローバルな ServerName と DocumentRoot と同じものにします。また、このバーチャルホストを設定ファイルの中で 先頭に置いて、デフォルトホストとして動作するようにします。

詳細はこちら、Apache バーチャルホスト説明書

下記のように設定ファイル ( httpd-vhosts-10-service.conf ) を作成します (ファイル名は任意)

[root@centos7 apache2]# vi /usr/local/apache2/conf/extra/httpd-vhosts-10-service.conf
<VirtualHost *:80>
ServerAdmin admin@naruhodo.cf
DocumentRoot "/usr/local/apache2/htdocs/naruhodo.cf"
ServerName naruhodo.cf
ServerAlias www.naruhodo.cf *.naruhodo.cf

# htaccess設定(START)(参考までに)
<Directory "/usr/local/apache2/htdocs/naruhodo.cf">
#Options Indexes FollowSymLinks
AllowOverride AuthConfig Limit
Order allow,deny
Allow from all
</Directory>
# htaccess設定(END)

# 301リダイレクト設定(START)(これも参考までに)
RewriteEngine on
RewriteMap    lowercase       int:tolower
RewriteCond   "${lowercase:%{HTTPS}}" !on
RewriteCond   "${lowercase:%{REQUEST_SCHEME}}"        !https
RewriteCond   "${lowercase:%{SERVER_PORT}}"   !443
RewriteCond        "${lowercase:%{HTTP_HOST}}"     "^naruhodo\.cf$"
RewriteRule ^(.*)$  https://www.%{HTTP_HOST}$1 [R=301,L]
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
# 301リダイレクト設定(END)

ErrorLog "logs/error_log"
CustomLog "logs/access_log" common
</VirtualHost>

これで、ネームベースのバーチャルホストの設定は終了です。
次は Apache 設定を確認し、naruhodo.cf サイトへアクセスします。

以下は、HTTPS を適用した状態での説明になりますが、HTTPS を適用しない場合はSSL設定部分をスキップしてください。

スキップ!(ここから)

HTTPS | ネームベースのバーチャルホストを設定

Let’s encrypt の SSL 証明書を適用して HTTPS 化するケースです。( 別の記事で 紹介しています )

[root@centos7 apache2]# vi /usr/local/apache2/conf/extra/httpd-ssl.conf

...

<VirtualHost *:443>
ServerName www.naruhodo.cf
ServerAlias naruhodo.cf
DocumentRoot "/usr/local/apache2/htdocs/naruhodo.cf"

AddDefaultCharset UTF-8

Protocols h2 http/1.1

SetOutputFilter BROTLI_COMPRESS;DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip no-brotli dont-vary

SSLEngine on
Header always set Strict-Transport-Security "max-age=31536000"
#SSLCertificateFile /etc/pki/tls/certs/server.crt
#SSLCertificateKeyFile /etc/pki/tls/private/server.key

#Let's encrypt
SSLCertificateFile /etc/letsencrypt/live/www.naruhodo.cf/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.naruhodo.cf/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/www.naruhodo.cf/chain.pem

ErrorLog "logs/https-error_log"
CustomLog "logs/https-access_log" combined
</VirtualHost>

スキップ!(ここまで)

バーチャルホストの設定を確認

バーチャルホストの設定のデバッグをするには Apache のコマンドラインスイッチ -S が便利です。
このコマンドは Apache が設定ファイルをどう解析したかについて出力します。IP アドレスとサーバ名を注意深く調べれば、設定の間違いを見つける助けになるでしょう。 (公式ホームより)

[root@centos7 apache2]# /usr/local/apache2/bin/httpd -S
VirtualHost configuration:
*:443                  is a NameVirtualHost
default server www.jacepark.com (/usr/local/apache2/conf/extra/httpd-ssl.conf:41)
port 443 namevhost www.jacepark.com (/usr/local/apache2/conf/extra/httpd-ssl.conf:41)
alias jacepark.com
port 443 namevhost www.naruhodo.cf (/usr/local/apache2/conf/extra/httpd-ssl.conf:122)
alias naruhodo.cf
*:80                   is a NameVirtualHost
default server any (/usr/local/apache2/conf/extra/httpd-vhosts-00-anydeny.conf:3)
port 80 namevhost any (/usr/local/apache2/conf/extra/httpd-vhosts-00-anydeny.conf:3)
port 80 namevhost jacepark.com (/usr/local/apache2/conf/extra/httpd-vhosts-10-service.conf:34)
alias www.jacepark.com
port 80 namevhost naruhodo.cf (/usr/local/apache2/conf/extra/httpd-vhosts-10-service.conf:123)
alias www.naruhodo.cf
wild alias *.naruhodo.cf
ServerRoot: "/usr/local/apache2"
Main DocumentRoot: "/usr/local/apache2/htdocs"
Main ErrorLog: "/usr/local/apache2/logs/error_log"
Mutex watchdog-callback: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/usr/local/apache2/logs/" mechanism=default
PidFile: "/usr/local/apache2/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="daemon" id=2
Group: name="daemon" id=2

Apache の config ファイル(httpd.conf)の設定を確認

[root@centos7 apache2]# /usr/local/apache2/bin/httpd -t
Syntax OK

Apache/httpd を再起動

再起動してプロセスを確認します。下記のように Active: active (running)..で OK です。

[root@centos7 apache2]# systemctl restart httpd2.service
[root@centos7 apache2]# systemctl status httpd2.service
● httpd2.service - The Apache HTTP/2 Server
Loaded: loaded (/etc/systemd/system/httpd2.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2019-06-05 21:43:39 JST; 19s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 12468 ExecStop=/usr/local/apache2/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 12473 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 12476 (httpd)
CGroup: /system.slice/httpd2.service
├─12476 /usr/local/apache2/bin/httpd -k start
├─12477 /usr/local/apache2/bin/httpd -k start
├─12478 /usr/local/apache2/bin/httpd -k start
├─12479 /usr/local/apache2/bin/httpd -k start
└─12480 /usr/local/apache2/bin/httpd -k start

Jun 05 21:43:39 centos7 systemd[1]: Starting The Apache HTTP/2 Server...
Jun 05 21:43:39 centos7 systemd[1]: Started The Apache HTTP/2 Server.
[root@centos7 apache2]#

サイト ( naruhodo.cf ) 確認用のテストページを作成

naruhodo.cf のルートディレクトリに index.html ファイルを作成します。

[root@centos7 apache2]# echo "<html><body><h1>It works!</h1></body></html>" > /usr/local/apache2/htdocs/naruhodo.cf/index.html

サイト ( naruhodo.cf ) を確認

確認方法1:ブラウザ ( Chrome ) でアクセス

website_access_test
website にアクセスして確認する

It works! が表示されれば OK です。

確認方法2:無料ウェブサイトテストサイトを利用

WebPageTest-Website_Performance_and_Optimization_Test
▲ Website Performance Test

確認方法3:curl コマンドを利用

-I ( 大文字i ) オプション:ページ情報を取得し、出力してくれます。

try🐶everything ~$ curl -I http://naruhodo.cf
HTTP/1.1 301 Moved Permanently
Date: Wed, 05 Jun 2019 13:00:36 GMT
Server: Apache
Location: https://www.naruhodo.cf/
Content-Type: text/html; charset=iso-8859-1

try🐶everything ~$ curl -I http://www.naruhodo.cf
HTTP/1.1 301 Moved Permanently
Date: Wed, 05 Jun 2019 13:00:43 GMT
Server: Apache
Location: https://www.naruhodo.cf/
Content-Type: text/html; charset=iso-8859-1

※ 筆者のサイトはすべてのアクセスに対して HTTPS へ 301リダイレクトされていますが、301リダイレクトされないサイトは下記のように出力されると思われます。

try🐶everything ~$ curl -I http://example.com
HTTP/1.1 200 OK
Date: Wed, 05 Jun 2019 13:10:56 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Type: text/html

try🐶everything ~$

テストページを削除

[root@centos7 apache2]# rm -f /usr/local/apache2/htdocs/naruhodo.cf/index.html

以上、お疲れさまでした。

スポンサーリンク

コメント

タイトルとURLをコピーしました