Nginx では、すべてのロケーション ブロックに content-security-policy を追加する必要がありますか?

Nginx では、すべてのロケーション ブロックに content-security-policy を追加する必要がありますか?

環境:Nginx、Node.js、デジタルオーシャンドロップレット

ドキュメントヘッダーを追加httpディレクティブは、、serverまたはコンテキストで使用できることを示しますlocation

しかし、私がコンテンツセキュリティポリシーhttpまたはコンテキストのいずれかでserverテストすると検出されませんhttps://csp-evaluator.withgoogle.com/またはhttps://securityheaders.com/
ブロックに追加すると、両方locationのサイトがそれを検出します。

ヘッダーの例:

add_header content-security-policy "default-src 'self';"

私のにはnginx.conf5 つのブロックがありlocation、そのうち 1 つはプロキシとして使用されています。content-security-policyすべてのブロックに追加する必要がありますか、それとももっと良い方法がありますか?

location ~* \.(jpg|png|svg|webp|ico)$ { }
location ~* \.(css)$ { }
location ~* \.(htm|html)$ { }
location ~* \.(js)$ { }
location / {
    proxy_pass http://127.0.0.1:9999;
}

また、他のすべての主要なセキュリティ ヘッダーを各ブロックに追加する必要がありますか? 冗長に思えますが、それがサイトを保護する唯一の方法である場合はそうします。

答え1

このadd_header指令には興味深い性質がある。ドキュメンテーション:

ディレクティブは複数存在する可能性があります。これらのディレクティブは、現在のレベルでディレクティブが定義されてadd_headerいない場合にのみ、前の構成レベルから継承されます。add_header

つまり、追加する場合は他のこれらのブロックのいずれかにヘッダーがある場合はlocation、またはブロックadd_headerからのディレクティブを繰り返す必要があります。serverhttp

include繰り返し実行する必要がある可能性のあるこのようなディレクティブを整理するには、d ファイルの使用を検討してください。

関連情報