SIGMA-SE Math & Tech Library

SIGMA-SE Math & Tech Library


数学と情報技術をテーマに、書籍や教材だけではつかみにくい考え方を具体例とともに簡潔にわかりやすく伝える解説サイトです。
技術の歴史や背景、関連知識の整理、学習のための覚書や要約記事も掲載しています。

VPSで作るDjangoサイト構築手順 - Apache編:2/4 Apache・SSL/TLS初期設定

概要

VPS上でApacheを起動し、HTTP/HTTPS通信を許可し、Let's EncryptでSSL/TLS証明書を取得する流れを整理する。

Webサイトを公開するには、Webサーバーの起動だけでなく、firewalld、DocumentRoot、HTTPS、証明書更新までつなげて確認する必要がある。特にSSL/TLSは、一度取得して終わりではなく、期限管理まで含めて運用する。

この記事の構成

対象環境と利用上の注意

  • 本文記載時の環境
    2018年当時のCentOS 7.4、Apache 2.4系、firewalld、当時のCertbot導入方法を利用した構築記録。
  • 確認時期
    2026年8月にApache、firewalld、Certbotの公式資料と照合。
    現在の環境で証明書の取得・更新を含む一連の手順は再実行していない。
  • 現在そのまま利用できない箇所
    CentOS 7はサポート終了済みであり、Certbotのパッケージ名や導入方法も現在とは異なる。
    新規構築ではサポート中のOSを選び、Certbot公式サイトが対象OS・Webサーバー向けに案内する現行手順を利用する。

前提環境

  • OS
    CentOS 7.4(サポート終了済み)
  • 言語
    Python
  • Webサーバー
    Apache
  • フレームワーク
    Django
  • データベース
    PostgreSQL
  • ドメイン
    example.com

作業時の注意点

  • HTTPとHTTPS
    80番ポートと443番ポートは別々に許可が必要になる。
  • --permanent
    付けない設定は再起動後に消えることがある。
  • 証明書取得失敗
    DNS未反映やApache起動中のポート競合を確認。
  • 自動更新
    証明書の取得だけでなく、更新確認まで運用に含める。

実施内容

Apache(httpd)インストール

  • インストール後、Apacheを起動し、OS起動時にも自動起動するよう設定
    $ yum install httpd
    $ systemctl start httpd
    $ systemctl enable httpd
    

ファイアウォールの設定

  • firewalldでHTTPとHTTPSのサービスを恒久的に許可し、設定を再読込み
    後にSSL/TLS化するため、ここでHTTPSも一緒に許可しておく。

    $ firewall-cmd --zone=public --add-service=http --permanent
    $ firewall-cmd --zone=public --add-service=https --permanent
    $ firewall-cmd --reload
    $ firewall-cmd --zone=public --list-services
    
  • httpでの接続確認
    httpで自身のドメイン(http://example.com)にアクセスし、Testing 123と表示されれば設定成功。

httpd自動起動の確認

  • httpdの自動起動設定を確認
    enabledと表示されれば、OS起動時にhttpdも起動。
    $ systemctl is-enabled httpd
    

DocumentRootの権限変更

  • 配置作業を行うvpsuserを所有者、Apacheをグループに設定
    静的ファイルを配信するだけならApacheに書込み権限は不要なので、DocumentRoot全体を775にはしない。

    $ cd /var/www
    $ chown vpsuser:apache html
    $ chmod 755 html
    
  • 仮のindex.html/var/www/html直下へ配置した後、HTTPレスポンスを確認

    $ curl -I http://example.com/
    

HTTPS用ポートの確認

  • serviceshttphttpsが表示されることを確認
    すでに「ファイアウォールの設定」で追加しているため、ここで同じ設定を重複して実行する必要はない。

    $ firewall-cmd --zone=public --list-all
     public (active)
      target: default
      icmp-block-inversion: no
      interfaces: eth0
      sources:
      services: dhcpv6-client ssh http https
      ports:
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    

SSL/TLS証明書設定

ここでは、SSL/TLS証明書が無料取得できるLet's Encryptを使用する。
以降、Certbot をインストールし、SSL/TLS証明書を取得して定期更新まで実施する。

  • mod_sslインストール
    ApacheSSL/TLSに対応させる。

    $ yum install mod_ssl    # mod_sslインストール
    
  • 起動確認
    active (running)であることを確認。長いプロセス一覧を転載するより、サービス状態と設定構文を確認する方が切り分けやすい。

    $ apachectl configtest
    $ systemctl restart httpd
    $ systemctl status httpd
    
  • EPELリポジトリのインストール
    EPELは、CentOSで標準搭載されていないパッケージをyumでインストール可能にするためのリポジトリ。

    $ yum install epel-release
    
  • Certbotのインストール
    Certbotは、Let's Encryptで使用するクライアントソフトウェアで、SSL/TLSサーバー証明書の取得、及び更新作業を自動化してくれる。

    $ yum install certbot python2-certbot-apache
    

    ※ 上記はCentOS 7当時のパッケージ名である。現在はCertbot公式のインストール手順で、利用中のOSとWebサーバーを選択して確認。

  • CertbotでSSL証明書を取得する

    $ sudo certbot --apache -d example.com
    
  • SSL/TLSの動作確認
    HTTPSで自身のドメイン(https://example.com)にアクセスできれば成功。
    ※ HTTPからHTTPSへのリダイレクトは、Certbot実行時にリダイレクトを選択した場合、またはApache側で別途設定した場合に有効になる。

Let's Encryptの定期更新

Let's Encryptのclassicプロファイルで発行される既定の証明書有効期間は現在90日であり、期限前に自動更新できる状態を維持する必要がある。
短期証明書のプロファイルや段階的な有効期間短縮も案内されているため、「3か月ごと」の固定スケジュールではなくCertbotの更新判定に任せる。
Let's Encryptによる期限通知メールは2025年6月4日に終了したため、メールを更新確認の代わりにはできない。

  • インストール方法に応じてsystemd timerまたはcronの自動更新設定を確認し、--dry-runで更新をテスト。通常の更新では、期限が近い証明書だけを対象とするcertbot renewを使い、--force-renewalは常用しない。

    $ systemctl list-timers --all | grep certbot
    $ sudo certbot renew --dry-run
    $ sudo certbot renew
    $ openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates
    
  • 有効期限の確認
    certbot renew --dry-runが成功することに加え、外部監視や定期的な証明書確認を用意して更新失敗を検知。

まとめ

  • Apacheを公開するには、httpd、firewalld、DocumentRootをまとめて確認。
  • HTTPS化では、mod_sslとSSL/TLS証明書の設定が必要になる。
  • Let's Encryptは更新が必要なため、取得後の期限確認も運用に含める。

参考文献

この記事を共有
Xで共有 Facebookで共有 LINEで共有



Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp