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 で再起動
- 問題なければ元ファイル削除する