VPSでサブドメインを設定する方法 【CentOS7 + Apache】
はじめに
レンタルサーバーやマネージドサーバーでは、サブドメインの設定はコントロールパネルから簡単に行うことができます。
しかし、VPSを利用している場合は自分で設定する必要があります。
今回はdevil-code.comのサブドメインであるapp.devil-code.comの設定に時間がかかってしまいましたので、ハマったポイントをメモしておきます。
前提知識
- CentOS7やLinuxの環境
- DNSの設定
サブドメインの設定手順
サブドメインの設定には、大まかに以下の2つの手順があります
- DNSレコードの設定
- Apache(WEBサーバ)の設定
DNSレコードの設定
利用しているサーバー会社のコントロールパネルのDNS設定から設定することができます。もし、Cloudflareを使用している場合は、CloudflareのコントロールパネルのDNS設定で行います。
Apacheの設定
Apacheの設定ファイルに以下の記述を追加します。
<VirtualHost *:80>
ServerName app.devil-code.com
DocumentRoot /var/www/html/app.devil-code.com
AllowEncodedSlashes on
<Directory /var/www/html/app.devil-code.com>
SetEnv HTTP_X_FORWARDED_PROTO http
SetEnv REAL_HOST_NAME app.devil-code.com
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
この設定を直接httpd.confに追記するか、IncludeOptionalディレクティブを使用して別ファイルで管理し、読み込むようにします。。
sudo vi /etc/httpd/conf/httpd.conf
httpd.confを確認すると、最後の方に以下のような記述があるはずです
IncludeOptional conf.d/*.conf
これを利用して設定を行います。以下のコマンドを実行します
sudo vi /etc/httpd/conf.d/httpd-vhosts.conf
httpd-vhosts.confに先ほどのVirtualHostの記述を追加します。設定を完了したら、サーバーを再起動します。
sudo systemctl restart httpd
これでサブドメインの設定は完了です
http://app.devil-code.comにアクセスし、設定したドキュメントルートの内容が表示されれば成功です。
なお、注意点として、この設定ではHTTP経由でアクセスする必要があります。HTTPSではありません。
ここまでで動作しない場合の対処方法
以下の対処方法を試してみてください
指定のドメインがAレコードに正しく設定されているか確認するために、次のコマンドを実行してください
nslookup app.devil-code.com
サーバーを再起動してみてください
sudo systemctl restart httpd
SSLの設定
app.devil-code.comをHTTPSで利用するためには、別途SSLの設定が必要です。以下の手順を参考にしてください
SSL証明書の取得
sudo certbot certonly --webroot -w /var/www/html/app.devil-code.com -d app.devil-code.com
ssl.confの編集
sudo vi /etc/httpd/conf.d/ssl.conf
以下のように設定を追記します
<VirtualHost *:443>
ServerName app.devil-code.com
DocumentRoot /var/www/html/app.devil-code.com
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private_key.key
</VirtualHost>
設定を完了したら、サーバーを再起動します
sudo systemctl restart httpd
これでOK
ハマったこと
- DNSレコード:事前に調査していたときに、誤った情報でCNAMEレコードを使用するという情報に出会いました。DNSレコードについての理解が浅く、その情報を信じてCNAMEレコードで設定を試してしまいました。実際は、www.devil-code.comがCNAMEレコードであるからといって、app.devil-code.comもCNAMEレコードで設定する必要はありませんでした。DNSレコードについて、種類と役割を正しく理解しましょう。
- SSLの設定:サブドメインの設定が成功しても、別途SSLの設定を行わないと、サブドメイン用の指定ドキュメントルートがHTTPSでは正しく表示されないことがあります(代わりにdevil-code.comのドキュメントルートが表示されます)。私はこの点に気づかず、.htaccessのリダイレクト設定を変更したり、関係のない作業に時間を費やしてしまいました。
これらの問題を回避するためには、DNSレコードの理解と適切な設定、SSL化の必要性を把握しておく必要があります。
一般的なDNSレコードの種類とそれぞれの役割、用途を表にまとめました✅
レコードの種類 | 役割 | 用途 |
---|---|---|
Aレコード | ドメイン名をIPアドレスにマッピングする | ウェブサイトやアプリケーションのホスティング |
AAAAレコード | ドメイン名をIPv6アドレスにマッピングする | IPv6環境でのホスティング |
CNAMEレコード | ドメイン名の別名を指定する | ドメインの別名やリダイレクト |
MXレコード | メールサーバの優先順位とドメイン名を指定する | メールの受信サーバの設定 |
TXTレコード | ドメインに関連するテキスト情報を格納する | SPFやDKIMの設定、メール認証、ドメイン所有権の確認など |
NSレコード | ゾーンの権威を持つネームサーバを指定する | ドメインのネームサーバ設定 |
SOAレコード | ゾーンの権威情報を提供する | ゾーンの設定や管理情報の提供 |
PTRレコード | IPアドレスをドメイン名に逆引きする | 逆引きDNS、IPアドレスからドメイン名を取得 |
SRVレコード | ドメイン名に関連するサービスの場所を指定する | ボイスチャット、メッセージング、その他サービスの指定 |
SPFレコード | ドメインが送信元として信頼できるメールサーバのリストを指定する | スパムメール対策、メール認証 |
DKIMレコード | ドメインのメールに署名を追加するための公開鍵を指定する | メールの認証、セキュリティ向上 |
CAAレコード | ドメインに証明書を発行できる認証局を制限する | SSL/TLS証明書の制限、セキュリティ強化 |
NAPTRレコード | E.164番号をSIP URIにマッピングする | VoIPやENUMに使用される |
さいごに
今回のサブドメインの設定について、手順とハマりポイントを共有しました。
VPSを利用している場合は、自分で設定を行う必要がありますが、DNSレコードの設定とApacheの設定を正しく行うことで、サブドメインを適切に設定することができます。
また、ハマったポイントとして、DNSレコードに関する誤った情報やSSL設定の重要性に気づかなかったことが挙げられます。
これらのポイントには注意が必要です。適切なDNSレコードの設定とSSLの設定を行うことで、サブドメインが正しく機能するようになります。
サーバーの再起動やドメインの確認など、トラブルシューティングも重要です。問題が発生した場合は、これらの手順を試してみてください。
以上が、CentOS 7とApacheを使用したサブドメインの設定に関する手順と所感です。
この情報が役立つことを願っています。何か訂正や質問があればTwitter等でお知らせください。