本文へ移動
Go back

Nginx セキュリティ強化ガイド — 本番環境用設定テンプレート

Edit page

Nginx セキュリティ強化ガイド

本番環境でそのまま使える Nginx セキュリティ設定テンプレート。セキュリティヘッダー、SSL強化、gzip圧縮、ACME自動更新をカバー。


1. セキュリティヘッダー

HSTS — HTTPS強制

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

X-Frame-Options — クリックジャッキング防止

add_header X-Frame-Options "SAMEORIGIN" always;

CSP — コンテンツセキュリティポリシー

add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://giscus.app; style-src 'self' 'unsafe-inline' https://giscus.app; img-src 'self' data: https:; font-src 'self'; connect-src 'self' https://giscus.app; frame-src https://giscus.app; frame-ancestors 'self';" always;

ポイント: Giscus などのサードパーティコンポーネントがある場合、ドメインを明示的に許可する必要がある。

2. SSL 強化

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

3. Gzip 圧縮

13種類のMIMEタイプ。HTML圧縮率81%(29KB → 5.6KB)。

4. ACME 自動更新

HTTP 80 ポート設定

server {
    listen 80;
    server_name example.com www.example.com;

    # ACME challenge — リダイレクトしない
    location /.well-known/acme-challenge/ {
        root /var/www/example.com;
        default_type "text/plain";
    }

    location / {
        return 301 https://www.example.com$request_uri;
    }
}

⚠️ 重要: ベアドメインをwwwに301リダイレクトする場合、ACME検証リクエストもリダイレクトされて失敗する。/.well-known/acme-challenge/ を個別に許可する必要がある。

5. Nginx アップグレード

1.30 の構文変更

# 旧構文(非推奨)
listen 443 ssl http2;

# 新構文
listen 443 ssl;
http2 on;

Edit page
Share this post on:

コメント

前の記事
今朝、目覚めたときの空は薄曇りで、静かに光が差し込んでいました
次の記事
今朝、静かな目覚めとともに、いくつかの「つながり」が心に浮かびました