Nextcloudの警告「Strict-Transport-Security HTTPヘッダーが設定されていません」
NextCloudをインストールしましたが、管理画面で以下の警告が出ています
インスタンスの一部のヘッダーが正しく設定されていません –
Strict-Transport-Security
HTTPヘッダーが設定されていません(少なくとも15552000
秒に設定する必要があります)。セキュリティを強化するために、HSTSを有効にすることを推奨します。 詳細については、ドキュメント↗を参照してください。
このエラーですが、Nextcloudの警告にある「Strict-Transport-Security HTTPヘッダーが設定されていません」という内容は、HSTS(HTTP Strict Transport Security)を設定して、HTTPSを使用する設定にすれば警告は解消されます
HSTSとは?
HSTS(HTTP Strict Transport Security)は、Webブラウザに「このサイトには常にHTTPSでアクセスすべき」と伝えるためのHTTPレスポンスヘッダーです。
これにより、以下のようなセキュリティ強化が期待できます:
- 初回アクセス後は常にHTTPSで通信(HTTPに戻らない)
- 中間者攻撃(MITM)のリスクを低減
- サイト運営者がHTTPSへの完全移行を徹底できる
HSTSの設定方法
設定するヘッダーの書式は以下のようになります
Strict-Transport-Security: max-age=15552000; includeSubDomains
ディレクティブ | 説明 |
---|---|
max-age=秒数 | HSTSの有効期間(秒)。例: 15552000秒(180日) |
includeSubDomains | サブドメインにもHSTSを適用する(任意) |
preload | ChromeのHSTSプリロードリストへの登録用(慎重に) |
Apacheでの設定方法
HTTPS (SSL) 用 VirtualHost に以下を追記します。
<VirtualHost *:443> ServerName example.com DocumentRoot /var/www/html # HSTS ヘッダーの設定(180日 + サブドメイン) Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem </VirtualHost>
apacheを再起動します
sudo systemctl restart httpd
Nginxでの設定方法
HTTPS(ポート443)でアクセスされる server
ブロックに、次の1行を追加します
server { listen 443 ssl http2; server_name example.com; # HSTS の追加 add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; root /var/www/html; index index.php index.html; }
nginxを再起動します
$ sudo systemctl restart nginx
設定後にNextcloudの管理画面をリロードすると、警告が消えているはずです。