Apache HTTP Server チート集
Apache HTTP Server の VirtualHost、Directory/Location、mod_rewrite、mod_ssl、.htaccess、Basic/Digest 認証、ログ設定を実務向けに整理したチート集。
- 更新日
- 2026-05-29
- 参照範囲
- 公式ドキュメント / man page / 主要ベンダーCLI
- 対象実装
- 主要 Linux / BSD / ネットワーク機器 CLI の一般的な実装
- 免責
- OS とバージョン差分は実環境で確認してください。
このチートシートの使いどころ
Apache HTTP Server チートシートは、VirtualHost、Directory、Location、mod_rewrite、mod_ssl、.htaccess、認証、ログ設定を扱う運用一覧です。対象は現行 httpd の一般的な構成です。移行前の設定棚卸し、TLS 設定確認、リダイレクト不具合、アクセス制御やログ調査の初動に使います。
40 / 40
apachectl configtest設定ファイルの構文を検証する。
sudo apachectl configtestapachectl graceful既存接続を保ちながら設定を再読込する。
sudo apachectl gracefulapachectl restarthttpd を再起動する。
sudo apachectl restartapachectl statusmod_status のサーバ状態を表示する。
apachectl statushttpd -Vコンパイル設定と ServerRoot を確認する。
httpd -V | grep -E "SERVER_CONFIG_FILE|HTTPD_ROOT"httpd -M読み込み済みモジュールを一覧する。
httpd -M | sort<VirtualHost *:80>HTTP 仮想ホストの最小構成。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example
</VirtualHost>NameVirtualHost 相当Apache 2.4 では ServerName ベースの VirtualHost をそのまま使う。
<VirtualHost *:80>
ServerName app.example.com
ProxyPass / http://127.0.0.1:3000/
</VirtualHost><Directory>ファイルシステムパス単位で権限を制御する。
<Directory "/var/www/example">
Require all granted
AllowOverride None
</Directory><Location>URL パス単位でアクセス制御する。
<Location "/admin">
Require ip 10.0.0.0/8
</Location><Files>ファイル名単位でアクセス制御する。
<Files ".env">
Require all denied
</Files><If>式に応じて条件付き設定を適用する。
<If "%{HTTP_HOST} == 'old.example.com'">
Redirect permanent / https://www.example.com/
</If>a2enmodDebian 系でモジュールを有効化する。
sudo a2enmod ssl rewrite headers proxy proxy_httpa2dismodDebian 系でモジュールを無効化する。
sudo a2dismod statusapachectl -M grep有効モジュールを確認する。
apachectl -M | grep rewrite_moduleLoadModuleRHEL 系などでモジュールを直接読み込む。
LoadModule rewrite_module modules/mod_rewrite.somod_proxy reverseバックエンドへリバースプロキシする。
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/mod_headers HSTSレスポンスヘッダを追加する。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"RewriteEngine Onmod_rewrite を有効化する。
RewriteEngine OnHTTPS 強制HTTP から HTTPS へ 301 リダイレクトする。
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]canonical hostwww ありへ正規化する。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]front controller存在しないパスを index.php へ渡す。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]RewriteRule proxyrewrite でプロキシ先へ転送する。
RewriteRule ^/api/(.*)$ http://127.0.0.1:8080/$1 [P,L]SSLEngine onTLS 仮想ホストで SSL を有効化する。
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
</VirtualHost>SSLCertificateFile証明書と秘密鍵を指定する。
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pemSSLProtocolTLS 1.2/1.3 のみに制限する。
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1SSLCipherSuiteTLS 1.2 向け cipher suite を制御する。
SSLCipherSuite HIGH:!aNULL:!MD5SSLHonorCipherOrderサーバ側 cipher 優先を指定する。
SSLHonorCipherOrder onAllowOverride None本番で .htaccess 読み込みを無効化する。
<Directory "/var/www/example">
AllowOverride None
</Directory>AllowOverride FileInfo AuthConfig必要な .htaccess 機能だけ許可する。
<Directory "/var/www/legacy">
AllowOverride FileInfo AuthConfig
</Directory>htpasswd createBasic 認証用パスワードファイルを作る。
sudo htpasswd -c /etc/apache2/.htpasswd aliceBasic authディレクトリに Basic 認証を掛ける。
AuthType Basic
AuthName "restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-userDigest authDigest 認証を設定する。
AuthType Digest
AuthName "admin"
AuthDigestProvider file
AuthUserFile /etc/apache2/digest.passwd
Require valid-userRequire ip送信元 IP で許可する。
<Location "/server-status">
Require ip 127.0.0.1 10.0.0.0/8
</Location>LogFormat combinedカスタムログ形式を定義する。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedCustomLogアクセスログを指定形式で出力する。
CustomLog /var/log/apache2/access.log combinedErrorLog LogLevelエラーログとレベルを設定する。
ErrorLog /var/log/apache2/error.log
LogLevel warnpiped log rotatelogsパイプログで日次ローテーションする。
CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access.%Y%m%d.log 86400" combinedmod_statusサーバ状態ページをローカル限定で公開する。
<Location "/server-status">
SetHandler server-status
Require local
</Location>SetEnvIf healthcheckヘルスチェックをアクセスログから除外する。
SetEnvIf Request_URI "^/health$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog| Command | Description | Example | Copy |
|---|---|---|---|
apachectl configtest | 設定ファイルの構文を検証する。 | sudo apachectl configtest | |
apachectl graceful | 既存接続を保ちながら設定を再読込する。 | sudo apachectl graceful | |
apachectl restart | httpd を再起動する。 | sudo apachectl restart | |
apachectl status | mod_status のサーバ状態を表示する。 | apachectl status | |
httpd -V | コンパイル設定と ServerRoot を確認する。 | httpd -V | grep -E "SERVER_CONFIG_FILE|HTTPD_ROOT" | |
httpd -M | 読み込み済みモジュールを一覧する。 | httpd -M | sort | |
<VirtualHost *:80> | HTTP 仮想ホストの最小構成。 | <VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example
</VirtualHost> | |
NameVirtualHost 相当 | Apache 2.4 では ServerName ベースの VirtualHost をそのまま使う。 | <VirtualHost *:80>
ServerName app.example.com
ProxyPass / http://127.0.0.1:3000/
</VirtualHost> | |
<Directory> | ファイルシステムパス単位で権限を制御する。 | <Directory "/var/www/example">
Require all granted
AllowOverride None
</Directory> | |
<Location> | URL パス単位でアクセス制御する。 | <Location "/admin">
Require ip 10.0.0.0/8
</Location> | |
<Files> | ファイル名単位でアクセス制御する。 | <Files ".env">
Require all denied
</Files> | |
<If> | 式に応じて条件付き設定を適用する。 | <If "%{HTTP_HOST} == 'old.example.com'">
Redirect permanent / https://www.example.com/
</If> | |
a2enmod | Debian 系でモジュールを有効化する。 | sudo a2enmod ssl rewrite headers proxy proxy_http | |
a2dismod | Debian 系でモジュールを無効化する。 | sudo a2dismod status | |
apachectl -M grep | 有効モジュールを確認する。 | apachectl -M | grep rewrite_module | |
LoadModule | RHEL 系などでモジュールを直接読み込む。 | LoadModule rewrite_module modules/mod_rewrite.so | |
mod_proxy reverse | バックエンドへリバースプロキシする。 | ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/ | |
mod_headers HSTS | レスポンスヘッダを追加する。 | Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" | |
RewriteEngine On | mod_rewrite を有効化する。 | RewriteEngine On | |
HTTPS 強制 | HTTP から HTTPS へ 301 リダイレクトする。 | RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] | |
canonical host | www ありへ正規化する。 | RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L] | |
front controller | 存在しないパスを index.php へ渡す。 | RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L] | |
RewriteRule proxy | rewrite でプロキシ先へ転送する。 | RewriteRule ^/api/(.*)$ http://127.0.0.1:8080/$1 [P,L] | |
SSLEngine on | TLS 仮想ホストで SSL を有効化する。 | <VirtualHost *:443>
ServerName www.example.com
SSLEngine on
</VirtualHost> | |
SSLCertificateFile | 証明書と秘密鍵を指定する。 | SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem | |
SSLProtocol | TLS 1.2/1.3 のみに制限する。 | SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 | |
SSLCipherSuite | TLS 1.2 向け cipher suite を制御する。 | SSLCipherSuite HIGH:!aNULL:!MD5 | |
SSLHonorCipherOrder | サーバ側 cipher 優先を指定する。 | SSLHonorCipherOrder on | |
AllowOverride None | 本番で .htaccess 読み込みを無効化する。 | <Directory "/var/www/example">
AllowOverride None
</Directory> | |
AllowOverride FileInfo AuthConfig | 必要な .htaccess 機能だけ許可する。 | <Directory "/var/www/legacy">
AllowOverride FileInfo AuthConfig
</Directory> | |
htpasswd create | Basic 認証用パスワードファイルを作る。 | sudo htpasswd -c /etc/apache2/.htpasswd alice | |
Basic auth | ディレクトリに Basic 認証を掛ける。 | AuthType Basic
AuthName "restricted"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user | |
Digest auth | Digest 認証を設定する。 | AuthType Digest
AuthName "admin"
AuthDigestProvider file
AuthUserFile /etc/apache2/digest.passwd
Require valid-user | |
Require ip | 送信元 IP で許可する。 | <Location "/server-status">
Require ip 127.0.0.1 10.0.0.0/8
</Location> | |
LogFormat combined | カスタムログ形式を定義する。 | LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined | |
CustomLog | アクセスログを指定形式で出力する。 | CustomLog /var/log/apache2/access.log combined | |
ErrorLog LogLevel | エラーログとレベルを設定する。 | ErrorLog /var/log/apache2/error.log
LogLevel warn | |
piped log rotatelogs | パイプログで日次ローテーションする。 | CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/access.%Y%m%d.log 86400" combined | |
mod_status | サーバ状態ページをローカル限定で公開する。 | <Location "/server-status">
SetHandler server-status
Require local
</Location> | |
SetEnvIf healthcheck | ヘルスチェックをアクセスログから除外する。 | SetEnvIf Request_URI "^/health$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog |