Apache2のConfig管理方法

Page content

Ubuntu流Apache2運用メモ

ディストリビューション毎に流儀がことなるようなので、Ubuntuっぽく運用するメモ

いろいろしらべてわかったこと

  • availableは、ファイルの置き場所、enabledにあるファイルが実際に読み込まれる
  • enabledには実体をおかず、availableにあるファイルへのリンクをおく
  • リンクは手動で作成せず、コマンドをつかって作成するのが推奨(ln -sで作っても問題はない)
  • sites~はバーチャルホスト設定を記載、conf~は全バーチャルホスト共通設定を記載する場所
  • すべてのバーチャルホスト(http/https等)で同じサービスをホストする場合は、conf-enabledに設定。
  • 特定のバーチャルホストにのみ適用の場合は、バーチャルホスト設定に直接記載。またはconf-availableにファイルをおいてIncludeする。
  • 最近はhttp->httpsのリダイレクトをしてhttps側でのみ提供するのが主流
  • Listen 80/Listen 443等はビルトインのports.confに記載されているため不要。
  • RHELよりも細かく分けて運用するイメージ、変更時に間違って他のところを変更したりするのは防げそう。
  • 設定の重複などもおきやすいので一長一短な感じ。

/etc/apache2のディレクトリの役割を表にしてみた

こんな感じ。

ディレクトリ 役割 物理的な実態 Apacheへの反映方法
sites-available バーチャルホスト設定(http/https)ファイル格納 バーチャルホスト設定実ファイル sudo a2ensite(元ファイル設置)
sites-enabled 有効なファイルのリンクが格納 site-availableへのシンボリックリンク sudo a2ensite(リンク作成先)
conf-available 設定ファイル 各種設定実ファイル(サービス単位、設定単位) sudo a2enconf(元ファイル設置)
conf-enabled 全バーチャルホスト共通設定 conf-availableへのシンボリックリンク sudo a2enconf(リンク作成先)

Configサンプル

/etc/apache2/sites-available/000-default.conf

http用のバーチャルホスト設定、すべてをhttpsにリダイレクト。

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /www/html
        ServerName moooi.jp

		Redirect permanent / https://moooi.jp/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

/etc/apache2/sites-available/default-ssl.conf

https用のバーチャルホスト設定。証明書設定など、SSL詳細設定は別ファイル。各ファイルの設定ファイルは分離してIncludeで指定。

<VirtualHost _default_:443>
    ServerName moooi.jp
    DocumentRoot /www/html

    # 共通・アプリ設定の読み込み
    Include conf-available/ssl-params.conf
    Include conf-available/app-ttrss.conf
    Include conf-available/app-vaultwarden.conf
    Include conf-available/app-webmin.conf
    Include conf-available/app-pgadmin4.conf

    # 証明書
    SSLCertificateFile    /etc/letsencrypt/live/moooi.jp/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/moooi.jp/privkey.pem

    # Wiki固有の設定
    <Directory "/www/html/naowiki/images">
       AllowOverride None
       php_admin_flag engine off
    </Directory>
</VirtualHost>

/etc/apache2/conf-available/ssl-params.conf

バーチャルホスト別の設定等、これはIncludeする。

# SSLの強度設定

SSLEngine on
SSLProtocol TLSv1.2 TLSv1.3
SSLHonorCipherOrder off
SSLSessionTickets off

SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

SSLCompression off
Header always set Strict-Transport-Security "max-age=63072000"

/etc/apache2/conf-available/app-webmin.conf

サービス毎の設定等。基本httpsでのみホストする予定なので、Httpsの設定ファイルからIncludeする。

ProxyPass /wm/ http://localhost:25252/
ProxyPassReverse /wm/ http://localhost:25252/

/etc/apache2/conf-available/security.conf

http,httpsの両方のバーチャルホストに適用するものなので、a2enconfでconf-enabledにリンクをはる


ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"

実際の運用イメージ

サービスを追加する場合

  • 設定ファイル作成 /etc/apache2/conf-available/app-xxxxx.conf
  • default-ssl.conf等のvirtualhostを定義しているファイルからInclude追加
  • apachectl configtestでConfigチェック
  • systemctl restart apache2 で再起動

サービスを削除する場合

  • default-ssl.conf等のvirtualhostを定義しているファイルからInclude削除、もしくはコメントアウト
  • apachectl configtestでConfigチェック
  • systemctl restart apache2 で再起動
  • 問題なければ元ファイル削除する

関連記事