ドメインの取得やDNSレコードの設定が完了し、CentOS7のサーバーの準備(LAMP環境の構築など)ができていれば、WEBサーバーであるhttpdでドメインの設定をするといよいよ世にあるWEBページを運営できるようになります。

CentOS7のhttpdでドメインの設定

3年以内に更新されました。情報が古い可能性があります。
更新日 : 2019年12月11日

ドメインの取得DNSレコードの設定が完了し、CentOS7のサーバーの準備(LAMP環境の構築など)ができていれば、WEBサーバーであるhttpdでドメインの設定をするといよいよ世にあるWEBページを運営できるようになります。

DNSレコードだけでも実は動く

LAMP環境の構築の後、DNSレコードの設定を適切に行っていれば、ドメインとサーバーのIPアドレスの紐付けはできているため、http://DNSレコードに登録したドメインでアクセスするとサーバーのテストページにアクセスが可能です。

以下の画像はDNSレコードでbecrazy.workのドメインをLAMP環境を構築したサーバーのIP青ドレスに紐付けたあとのWEBページです。

httpdの設定を行う前
httpdの設定を行う前

今回は公開したいページを適切に公開し、セキュリティ的にも問題がないようにWEBサーバー(httpd)の設定を行っていきます。

事前準備

事前準備としてhttpdがインストールされているかどうかの確認と、設定ファイルのバックアップファイル作成を行います。サーバーにログインした状態で作業を進めましょう。

httpdがインストールされているか確認

今回はサーバーにhttpdがインストール済みである前提で話を進めます。httpdがインストールされているかどうか確認したい場合にはhttpd -vコマンドで確認ができます。また、そのときにhttpdのバージョンが2.4であることを確認してください。

バックアップファイルの作成

httpdがインストールされている場合には、今回はhttpdの設定ファイルを書き換える必要があるため、設定ファイルのバックアップを事前に作成しておきましょう。

# バックアップファイルを事前に作成
$sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk

# バックアップファイルが作成されたかどうか確認
$ls /etc/httpd/conf

sudoを利用しているため、パスワードの入力を求められた場合には入力してください。

httpdの設定変更

いよいよWEBサーバー(httpd)の設定変更を行っていきます。まずは先程バックアップファイルを作成したhttpd.confファイルの編集を行います。

httpd.confの設定変更

# httpdのディレクトリへ移動
$cd /etc/httpd

# 設定ファイルの編集
$sudo vi conf/httpd.conf

viエディタを起動したら早速ファイルを編集していきます。

### 旧
DocumentRoot "/var/www/html"
### 新(コメントアウト)
#DocumentRoot "/var/www/html"


### 旧
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
### 新(コメントアウト)
#<Directory "/var/www">
#    AllowOverride None
#    # Allow open access:
#    Require all granted
#</Directory>


### 旧
<Directory "/var/www/html">
    #
    # 色々英語で書いてある...
    Options Indexes FollowSymLinks

    #
    # 色々英語で書いてある...
    AllowOverride None

    #
    # 色々英語で書いてある...
    Require all granted
</Directory>

### 新(コメントアウト)
#<Directory "/var/www/html">
    #
    # 色々英語で書いてある...
#    Options Indexes FollowSymLinks

    #
    # 色々英語で書いてある...
#    AllowOverride None

    #
    # 色々英語で書いてある...
#    Require all granted
#</Directory>


### 旧
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

### 新(コメントアウト)
#<Directory "/var/www/cgi-bin">
#    AllowOverride None
#    Options None
#    Require all granted
#</Directory>

### 旧がもともと書いてある内容です。### 新(コメントアウト)以下の内容に書き換えてください。不要な部分をすべてコメントアウトしています。編集が終わったらviエディタで保存・終了を行ってください。

さらに、編集したhttpd.confの内容にミスがないかどうかを確認するために以下のコマンドで確認します。

# 設定ファイルにミスがないか確認
$apachectl configtest
Syntax OK

Syntax OKと表示されれば設定は問題なしということになります。
もしこれ以外の表示が出てしまったら、再起動できなくなってしまうため、バックアップファイルから復元してください

変更した設定について説明します。

  • DocumentRoot
    ドキュメントルートの設定です。既存の設定をコメントアウトで削除しています。
  • <Directory "/var/www">〜</Directory>
    /var/wwwディレクトリ内部専用の設定項目が羅列されています。今回は不要なのでコメントアウトで削除しています。
    <Directory />〜</Directory>という別の設定でサーバーのファイルシステム全体のHTTPアクセスを拒否している状態になります。
  • <Directory "/var/www/html">〜</Directory>
    上記と同様です。/var/www/htmlディレクトリ内部の設定項目をすべてコメントアウトしています。
  • <Directory "/var/www/cgi-bin">〜</Directory>
    上記と同様です。

ここまで設定が完了していれば、現状はサーバー全体が非公開状態になる設定になります。(httpdが用意しているテストページ以外)

テストページの表示設定の削除

現在の設定だとテストページだけが表示される設定になっているので、テストページも表示しないように設定しましょう。

現在/etc/httpdのディレクトリにいる状態かと思います。以下のコマンドでテストページを表示しない設定にします。

# welcome.confというファイル名をwelcome.conf.bkというファイル名に変更
$sudo mv conf.d/welcome.conf conf.d/welcome.conf.bk

httpdのテストページは/etc/httpd/conf.d/welcome.confというファイルで設定されています。そのファイル名を変更しました。

なぜこの作業を行ったのかと言うと、先程編集したhttpd.confの最後の行にあるIncludeOptional conf.d/*.confという設定に関係があります。これは/etc/httpd/conf.d/ディレクトリに存在する*.conf(*はどんな名前でも良いという意味)を設定ファイルとして読み込む設定です。そのためwelcome.confというファイル名をwelcome.conf.bkというファイル名に変更することで読み込まない設定になります。

ドメインに対してアクセスさせたいページの設定

最後にようやく本題である、ドメインでアクセスさせたときに表示したいページの設定を行います。

自分の構築したいWEBページの設定は、httpd.confにサービスの設定を書くと管理がしづらいため、先程利用した/etc/httpd/conf.dディレクトリを利用するのが理想的です。このディレクトリに設定ファイルを作成して自分のWEBサービスを提供できるように設定していきます。

# 設定ファイルを新規作成して編集
$sudo vi conf.d/becrazy.work.conf

このように、取得したドメイン名をファイル名とし、.confファイルにしてあげれば管理がしやすいです。.confファイルでさえあれば設定は読み込まれるため自分のわかりやすいファイル名で作成してください。

viエディタが起動したら以下の内容へ編集しましょう。

<VirtualHost *:80>
        DocumentRoot "/var/www/html"
        ServerName becrazy.work(DNSレコードで設定したドメイン)
        CustomLog       logs/becrazy.work.access.log combined
        ErrorLog        logs/becrazy.work.error.log
        <Directory "/var/www/html">
				Options FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
</VirtualHost>

内容を以下で解説します。

  • <VirtualHost *:80> 〜 </VirtualHost>
    仮想ホストの設定です。ドメインやIPアドレスごとに、一つのサーバーで複数のWEBサービスを提供するための設定です。今回はWEBサービスを1つだけ設定しますが、追加しやすいようにVirtualHostで設定しています。
    *:80はポート80番の自身のIPアドレスすべてで受け付けるリクエストという意味です。
  • DocumentRoot
    ドキュメントルートですVirtualHostの設定内部でのみ有効なドキュメントルートになります。仮想ホストごとに別のドキュメントルートを設定できます。
  • ServerName
    DNSレコードで設定したドメインを設定するサーバー名設定です。この設定のおかげで、同一IPアドレスでも複数のドメインでWEBサービスを分ける設定が可能です。上記の設定であればhttp://becrazy.work/〜というドメインでのアクセスをすべてこの仮想ホストで捌くことになります。もちろん自身のドメインの設定に書き換えて利用してください
  • CustomLogErrorLog
    通常のアクセスログとエラーが起きた際のエラーログの設定です。ログの出力ファイル名を指定します。通常/etc/httpd/からの相対パスで記述するので注意しましょう。お好きなファイル名を記載して構いません。(筆者はいつもドメイン名に合わせてファイル名を決めます。)
  • <Directory "/var/www/html">
    この仮想ホスト内で利用するディレクトリ専用の設定です。
  • Options FollowSymLinks
    このディレクトリ内のオプション設定です。設定の詳細は今回は省きます。ドキュメントはこちらを参照してください。
  • AllowOverride All
    Directory設定で利用する設定項目の1つで、設定項目の別ファイル(.htaccess)での上書きを許可する設定です。PHPなどで.htaccessファイルを利用する場合にはAllにします。不要な場合にはNoneで書き換えます。
  • Require all granted
    このディレクトリ内のアクセス許可設定です。今回であれば/var/www/htmlディレクトリ内部のアクセスをすべて許可します。

設定項目が多くて大変ですが、一つ一つがセキュリティや動作に関わるのでゆっくりで良いので理解していきましょう。

今回の設定で一番おもしろいのがVirtualHostServerNameです。仮想ホスト設定により、1つのサーバーで複数のWEBサーバーを構築可能です。後はDNSレコードの設定とServerNameの設定を合わせてあげれば自動的にレスポンスを振り分けます。
この設定方法を「同一IPアドレスによる、名前ベースのVirtualHost設定」と言います。

ここまで編集が終了し、エディタにて保存終了したら、以下のコマンドで設定ファイルの設定に間違いがないか確認しましょう。

# 先程のシンタックスチェックをもう一度行う
$apachectl configtest
Syntax OK

確認が大丈夫そうであれば以下のコマンドでhttpdを再起動します。

# 再起動コマンド。問題なければ何も出力されない
$sudo systemctl restart httpd

これで再起動が問題なければ、設定は完了です。

ブラウザで確認

最後にテスト用のファイルを作成してブラウザでアクセス確認を行いましょう。

# 先程仮想ホストとして設定したドキュメントルートへ移動
$cd /var/www/html

# index.htmlファイルを作成
$sudo vi index.html

viエディタで適当なHTMLを書いて保存終了してください。

最後に設定したDNSレコード及び先程の設定に従ってブラウザでアクセスしましょう。筆者の場合であればhttp://becrazy.workにアクセスすることでindex.htmlの内容が表示されます。

httpd設定後のブラウザ確認
httpd設定後のブラウザ確認

httpdのデフォルトの設定ではindex.htmlが省略可能になっています。
そのためhttp://設定したドメイン/index.htmlでも同一のページが表示されます。