📘

Nginxの初期セットアップとセキュリティヘッダー設定

に公開

はじめに

Nginxの初期設定をしました。

参考にできるよう書いて残しておきます。

1, Nginxインストール/疎通確認

Nginxをインストールします。

ここではUbuntuを前提として説明します。

# パッケージリストの更新
sudo apt update

# Nginxのインストール
sudo apt install nginx

# Nginxが自動起動するように設定(デフォルトで有効ですが念のため)
sudo systemctl enable nginx

インストール後、Nginxが起動しているか確認します。


# Nginxのステータスを確認
sudo systemctl status nginx

ステータスが active (running) と表示されていれば、正常に起動しています。

ブラウザからアクセスしてNginxのデフォルトページが表示されることを確認します。

その際、開発者ツールのネットワークタブでHTTPレスポンスヘッダーも確認しておくことをお勧めします。

この後の設定変更と比較するのに役立ちます。

2, 汎用的な最適化

初期設定では、いくつかパフォーマンス最適化設定をしておきます。

nginx.conf ファイルに以下の設定を追加・変更します。


# /etc/nginx/nginx.conf

# ワーカープロセスの数
worker_processes auto;

# 接続処理の効率化
events {
  worker_connections 1024;
}

http {
  # サーバーバージョンの非表示
  server_tokens off;

  # ファイル送信の最適化
  sendfile on;

  # TCP_NODELAYを有効化
  # 小さなパケットが送られる際の遅延を減らす
  tcp_nopush on;
  tcp_nodelay on;

  # gzip圧縮の有効化
  # テキストベースのコンテンツを圧縮して転送量を削減
  gzip on;
  gzip_disable "msie6"; # 古いIEの不具合対策
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

特にworker_processesはサーバーのCPUコア数に合わせて設定することが推奨されるそうです。

ここではauto に設定することで、Nginx側で最適値にしてくれるのでこれで良さそうです。

3, セキュリティヘッダー追加

Webサーバーのセキュリティ向上のため、HTTPヘッダーを追加しておきます。

クリックジャッキングやクロスサイトスクリプティング(XSS)などの攻撃を防ぐことができます。

nginx.conf の http ブロック、または特定のバーチャルホスト設定ファイルに追加します。


# /etc/nginx/nginx.conf の http ブロック、または /etc/nginx/sites-available/default などに追加

http {
  # ... 省略 ...

  # X-Frame-Options: クリックジャッキング対策
  add_header X-Frame-Options "SAMEORIGIN";

  # X-Content-Type-Options: MIMEタイプスニッフィング対策
  add_header X-Content-Type-Options "nosniff";

  # X-XSS-Protection: XSS対策
  add_header X-XSS-Protection "1; mode=block";

  # Referrer-Policy: リファラー情報(どこから来たか)の制御
  # "no-referrer-when-downgrade"が一般的
  add_header Referrer-Policy "no-referrer-when-downgrade";

  # Strict-Transport-Security (HSTS): HTTPSの強制
  # HTTPSを使用する場合に設定
  # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
}

Strict-Transport-Security ヘッダーは、HTTPS化している場合にのみ有効にします。
ユーザーのブラウザが強制的にHTTPS接続を試みるようになります。

4, 動作確認

設定ファイルを変更したら、必ずNginxを再起動する前に構文チェックを行います。


# 設定ファイルの構文チェック
sudo nginx -t

syntax is ok test is successful と表示されればOKです。

問題がなければ、Nginxを再起動して設定を反映させます。

# Nginxの再起動
sudo systemctl restart nginx

ブラウザで確認し、セキュリティヘッダーが付与されていることなどを確認します。これで初期設定は完了です!

終わりに

その他に、アクセスログ・エラーログ設定、キャッシュ設定、ALBからのヘルスチェック設定などを追加していくイメージです。

また、.envなどの隠しファイル隠蔽も必要かと思います。載せるプロジェクトに合わせてセキュリティ面は随時反映させておくべきと思います。

お読みいただきありがとうございました。

Discussion