2026年8月15日
2026年8月15日
ApacheでHTTPSのみ許可してHTTPを拒否する方法
はじめに
HTTPSのみでWebサイトへのアクセスを許可し、HTTPからのアクセスを完全に拒否するための設定方法について解説します。これはセキュリティ強化の一環として使用されることがあります。また、新しいHTTPS推進プログラムやGDPRなどの規制要件に対応するためにも必要となる場合があります。
症状・背景
このテーマが必要になる主な場面は以下の通りです:
- HTTPSへの移行を進めているが、HTTPからのアクセスを完全に切断したい。
- セキュリティ強化の一環としてHTTPSのみの利用を推進している。
- 新しいセキュリティポリシーや規制要件に対応する必要がある。
手順・設定方法
ステップ1: SSLモジュールの確認
# ApacheにSSLモジュールがインストールされていることを確認します。
a2enmod ssl
ステップ2: サーバー名とドキュメントルートを指定する
# sites-availableディレクトリ内に新しいVirtualHostファイルを作成します。
sudo nano /etc/apache2/sites-available/000-default-le-ssl.conf
# 以下の設定を追加します。
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
# SSL証明書と鍵ファイルのパスを指定します。
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
# HTTPからのアクセスを拒否するための設定を追加します。
<VirtualHost *:80>
ServerName example.com
# ここにHTTPからのアクセスを拒否する設定を記述します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
ステップ3: 設定ファイルの有効化
# 新しいVirtualHost設定を有効にします。
sudo a2ensite 000-default-le-ssl.conf
ステップ4: Apacheサーバー再起動とテスト
# Apacheサーバーを再起動して設定を適用します。
sudo systemctl restart apache2
# サーバーの動作を確認します。
curl -I https://example.com
curl -I http://example.com
注意事項
- SSL証明書の取得とインストール: 本記事ではLet's Encryptを使用していますが、自社で発行した証明書を使用することも可能です。
- リダイレクトのパフォーマンス: HTTPからのアクセスを完全に拒否する設定は一部のユーザーにとって不便な場合があります。慎重に検討してください。
- セキュリティ上の注意: この設定は脆弱性を低減しますが、他のセキュリティ策も併用することをお勧めします。
- パフォーマンス/運用上の注意: リダイレクト処理は小さな負荷になりますが、大量のアクセスがある場合は考慮が必要です。
まとめ
1. SSLモジュールの確認: ApacheにSSLモジュールがインストールされていることを確認します。
2. VirtualHost設定の追加: HTTPSとHTTPの接続方法を指定します。
3. 有効化と再起動: 新しい設定を有効にしてApacheサーバーを再起動します。
4. リダイレクトテスト: HTTPからのアクセスが拒否されていることを確認します。
関連記事: