私は最近、すべてのhttpトラフィックをhttps(およびすべてのwwwトラフィックをno-www)にリダイレクトするようにnginx構成を変更しました。
サーバーブロックにもadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
を追加することも理にかなっていますか?または、すでにすべてのトラフィックをリダイレクトしているので、それは不要ですか?長所(および短所があれば)を知っておくとよいでしょう。
必要に応じて、現在の仮想ホスト構成は次のとおりです。
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert_chain.crt;
... other SSL related config ...
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
... other SSL related config ...
... remaining server configuration ...
}
HSTSは、httpではなく常にhttpsを使用するようブラウザに指示します。その構成を追加すると、httpからhttpsへの転送の必要性が減少する可能性があるため、わずかにWebサイトのパフォーマンスが向上し、非常に少しサーバーの負荷を減らします。
参考までに、これは私がNginxベースのWebサイトで使用するセキュリティヘッダーです。これを1つのファイルに保存し、httpサーバーやhttpsサーバーなど、必要なすべてのサーバーから含めます。 GoogleやFacebookなどの一般的なリソースを読み込むことができます。
# Security headers
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "default-src 'self' www.google-analytics.com ajax.googleapis.com www.google.com google.com gstatic.com www.gstatic.com connect.facebook.net facebook.com;";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "Origin";
説明
それでも、httpからhttpsへのリダイレクトが必要です。
受け入れられた回答は素晴らしいですが、古くなっていて、1行ずつ調べていたときに私が見つけた欠陥があります。
HSTSヘッダーの期間は、セキュリティ要件を満たすために少なくとも3か月である必要があります。セキュリティヘッダースニペットで次のコードを使用して、SSLテストでA +を取得しました。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
第2に、X-Frame-Options
の使用は推奨されません(多くの/ほとんどの主要なブラウザではサポートされていませんでした)。現在の標準(つまり、すべての主要な最新ブラウザに実装されている)はContent-Security-Policy
(CSP)です。
add_header Content-Security-Policy 'frame-ancestors https://mywebapp.mywebsite.example';
例から明らかなように、CSPヘッダーはサイトごとに設定する必要があります(まだ見たことのない賢い正規表現などを除いて)。
add_header
のalways
パラメータを指定して、内部的に生成されたエラーページにもこのヘッダーを含めることをお勧めします。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
同様に、 応答ヘッダーにpreload
ディレクティブを追加 して、後でWebサイトをプリロードリストに追加できるようにします。