2026年9月14日

2026年9月14日

NginxでCORS(クロスオリジン)を設定する方法

はじめに

Nginxは高性能なWebサーバーソフトウェアであり、多くのWebサイトやAPIのバックエンドとして使用されています。しかし、クロスオリジンリソース共有(CORS)ポリシーを正しく設定しないと、ブラウザからリモートのAPIへのアクセスが制限されてしまいます。この記事では、Nginxを使用してCORSを設定する方法について解説します。

症状・背景

NginxでCORSが必要な場面は以下のような状況です:

  • クライアント側がJavaScriptを使用し、他のドメインからAPIへのアクセスを行いたい場合
  • APIサーバーとクライアント間のオリジンが異なる場合
  • ブラウザによるポリシー制限に直面している場合

手順・設定方法

ステップ1: 基本的なCORS設定

# Nginxの配置ファイルを開く
sudo nano /etc/nginx/sites-available/default

# 全体にCORSヘッダーを適用するためのlocation設定追加
server {
    listen 80 default_server;
    server_name example.com;

    location / {
        # CORSヘッダーを追加
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        # デフォルトの設定を追加
        include snippets/fastcgi-php.conf;

        # カスタムドキュメントルートの指定
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

ステップ2: 認証と応答ヘッダー

# OPTIONSリクエスト用のlocation設定追加
server {
    listen 80 default_server;
    server_name example.com;

    location / {
        # CORSヘッダーを追加
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        # OPTIONSリクエストに対する処理
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Length' 0;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            return 204;
        }

        # デフォルトの設定を追加
        include snippets/fastcgi-php.conf;

        # カスタムドキュメントルートの指定
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

ステップ3: 複数オリジンへの対応

# ある特定のオリジンにのみアクセスを許可する場合
server {
    listen 80 default_server;
    server_name example.com;

    location / {
        # CORSヘッダーを追加
        add_header 'Access-Control-Allow-Origin' 'https://example.org';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        # OPTIONSリクエストに対する処理
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' 'https://example.org';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Length' 0;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            return 204;
        }

        # デフォルトの設定を追加
        include snippets/fastcgi-php.conf;

        # カスタムドキュメントルートの指定
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

ステップ4: 実践/トラブルシュート/監視

# Nginxを再起動して変更を反映させる
sudo systemctl restart nginx

# Nginxのログを確認する
tail -f /var/log/nginx/error.log

注意事項

  • CORS設定はセキュリティ上重要な部分であり、不適切な設定は脆弱性につながる可能性があります。
  • アクセス許可されたオリジンのみに制限することで、攻撃を防ぐことができます。
  • ログファイルの監視により、不正アクセスや異常なアクセスを早期発見することが可能です。

まとめ

1. 基本的なCORS設定: Nginx全体にCORSヘッダーを追加します。

2. 認証と応答ヘッダー: OPTIONSリクエストに対する適切なレスポンスを定義します。

3. 複数オリジンへの対応: 特定のオリジンのみにアクセスを許可する設定を行います。

4. 実践/トラブルシュート/監視: Nginxを再起動し、ログファイルを確認することで問題を早期発見します。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲