Apache2.4で複数ドメインを1つのサーバーで動かして Let's Encrypt でssl対応する方法のメモ
Apache2.4で複数のドメインを当てて、Let's Encryptで二つのサイトでssl対応をした際のメモを記しておきます。
- 要約
- Let's Encryptで複数のドメインで証明書を取るにはコマンドがあるが、既に一つのSSL認証を取得している場合は一度失効と削除をする必要があるようです。
/etc/http/conf/httpd.conf
の記述を/etc/httpd/conf.d/ssl.conf
に転載するのが基本- Let's Encryptで取得したキーのありかを conf ファイルで指定してやらないと駄目
- 何度も設定間違って再取得していると、1時間、または1週間のデッドロックを食らう
- ドメインのアクセスには
http://
https://
www.
有りwww.
無しの合計4パターンがあるが、今回はhttps://
のwww無しで統一リダイレクトをさせる設定にした
Let's Encryptで複数のドメインで証明書を取るコマンド
既に一つのSSL認証を取得している場合は一度失効と削除をする必要があるようです。 削除の方については以下のサイト等を参考にさせていただきました。
2つのサイトでのSSL認証の取得コマンド
rootユーザーになって以下のコマンドを打ちます。
例はドメイン aaa.site
, bbb.site
の二つとしています。
サイトの公開フォルダはサーバー内のそれぞれ /var/www/aaa-site
, /var/www/bbb-site
にあるものとします。
# certbot certonly --webroot -w /var/www/aaa-site -d aaa.site -w /var/www/bbb-site -d bbb.site
なお、インストールの経緯でコマンドの最初は certbot-auto
等にもなるようです。
次にApacheの設定ファイルです。
/etc/httpd/conf/httpd.conf
NameVirtualHost *:80 # 一つ目のサイトの設定 <VirtualHost *:80> DocumentRoot /var/www/aaa-web-site ServerName aaa.site # エイリアスの指定で www 付きでのアクセスも受け入れる事が出来るようです。 ServerAlias www.aaa.site AddDefaultCharset UTF-8 <Directory "/var/www/aaa-web-site/"> AllowOverride All # リダイレクト処理を行う設定 RewriteEngine On # 以下の二つのドメインでアクセスがあった場合書き換え処理を行う # http://aaa.site と http://www.aaa.site でアクセスがあった場合、リダイレクトをする RewriteCond %{SERVER_NAME} =aaa.site [OR] RewriteCond %{SERVER_NAME} =www.aaa.site # リダイレクト先は https://aaa.site となる、URIのパラメーターがある場合はそのままで飛ばす # 301リダイレクト LはマッチしたらRewriteを止め以降のルールは無視するそうです RewriteRule ^ https://aaa.site%{REQUEST_URI} [R=301,L] </Directory> </VirtualHost> # ふたつめのサイトの設定 やっている事は同じです <VirtualHost *:80> DocumentRoot /var/www/bbb-web-site ServerName bbb.site ServerAlias www.bbb.site AddDefaultCharset UTF-8 <Directory "/var/www/bbb-web-site/"> AllowOverride All RewriteEngine On RewriteCond %{SERVER_NAME} =bbb.site [OR] RewriteCond %{SERVER_NAME} =www.bbb.site RewriteRule ^ https://bbb.site%{REQUEST_URI} [R=301,L] </Directory> </VirtualHost>
/etc/httpd/conf.d/ssl.conf
かなり前に行ったLet's Encryptが自動生成した記述があるかは不明。長い記述の一部分のみを記載
NameVirtualHost *:443 # 一つ目のサイトの設定 <VirtualHost _default_:443> SSLEngine on DocumentRoot /var/www/aaa-web-site ServerName aaa.site ServerAlias www.aaa.site # SSL認証キーのありかを指定する Let's Encrypt で必要な設定 # ファイルの場所はCentOS7の私の環境の場合です。環境によって異なる可能性があります。 SSLCertificateFile /etc/letsencrypt/live/aaa.site/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/aaa.site/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/aaa.site/chain.pem <Directory "/var/www/aaa-web-site/"> AllowOverride All AddDefaultCharset UTF-8 RewriteEngine On # https://www.aaa.site でアクセスがあった場合のリダイレクト設定になる RewriteCond %{SERVER_NAME} =www.aaa.site # https://aaa.site へリダイレクトする、URIのパラメーターがある場合はそのままで飛ばす RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </Directory> </VirtualHost> # ふたつ目のサイトの設定 やってることは同じですが、 # 証明書キーの設定は1つめのサイトで行っているので必要無いのがミソです。 <VirtualHost _default_:443> SSLEngine on DocumentRoot /var/www/bbb-web-site ServerName bbb.site ServerAlias www.bbb.site <Directory "/var/www/bbb-web-site/"> AllowOverride All AddDefaultCharset UTF-8 RewriteEngine On RewriteCond %{SERVER_NAME} =www.bbb.site RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </Directory> </VirtualHost>
参考にさせていただいたサイト