作りたいものがありすぎる

40歳を過ぎてプログラミングを始めた人の顛末とこれからなど

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認証を取得している場合は一度失効と削除をする必要があるようです。 削除の方については以下のサイト等を参考にさせていただきました。

ajicolor.hatenablog.jp

yoshinorin.net

curecode.jp



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>

参考にさせていただいたサイト

weblabo.oscasierra.net

oxynotes.com

jitaku-server.com

qiita.com

www.netassist.ne.jp

hi3103.net

www.yoheim.net