ApacheでCORS設定を動的に切り替える方法を徹底解説

CORS(Cross-Origin Resource Sharing)は、異なるオリジン間でのリソース共有を制御する仕組みであり、Webアプリケーションのセキュリティと柔軟性に深く関わっています。標準的なWebブラウザは、セキュリティ上の理由からスクリプトによる他のドメインへのアクセスを制限しますが、CORSを適切に設定することで、安全に外部リソースを利用できるようになります。

特にAPIやフロントエンドとバックエンドが異なるドメインで動作するシステムでは、CORS設定が不可欠です。しかし、すべてのリクエストに対して一律のCORSポリシーを適用するのは、セキュリティリスクを高めたり、柔軟性を損なったりする可能性があります。

本記事では、ApacheでCORS設定を動的に切り替える方法を解説します。これにより、リクエストの内容に応じてCORSポリシーを変更し、必要なリソースへのアクセスを許可しながらも、不要なリスクを最小限に抑えることが可能になります。具体的な手順や設定例を交えながら、効率的にCORSを管理する方法を見ていきましょう。

目次

CORSとは何か


CORS(Cross-Origin Resource Sharing)は、異なるオリジン間でのリソース共有を制御する仕組みです。オリジンとは、Webページを提供するスキーム(http/https)、ホスト(ドメイン)、およびポート番号の組み合わせを指します。

通常、Webブラウザは「同一オリジンポリシー(Same-Origin Policy)」に従い、異なるオリジンからのリソース読み込みを制限します。これにより、不正なスクリプトによるデータの盗み出しなどを防ぐことができます。しかし、APIや外部サービスとの連携が求められる現代のWeb開発では、同一オリジンポリシーだけでは不都合が生じます。

CORSは、こうした制限を回避しつつ、安全に異なるオリジン間でリソースを共有するための標準的な手法です。サーバー側で適切にCORSヘッダーを設定することで、ブラウザが外部リソースへのアクセスを許可するかどうかを判断します。

CORSの仕組み


CORSは主に以下のヘッダーを使用して動作します:

  • Access-Control-Allow-Origin: 許可するオリジンを指定します。例: Access-Control-Allow-Origin: https://example.com
  • Access-Control-Allow-Methods: 許可するHTTPメソッド(GET, POST, PUTなど)を指定します。
  • Access-Control-Allow-Headers: 許可するリクエストヘッダーを列挙します。

これらのヘッダーを通じて、サーバーはどのオリジンからのリクエストを受け入れるかを柔軟に制御できるのです。

ApacheでのCORS設定の基本


ApacheでCORSを設定するには、HTTPレスポンスヘッダーにCORS関連の情報を追加する必要があります。Apacheは柔軟な設定が可能であり、.htaccessファイルやhttpd.confファイルを使用してCORSを管理できます。

基本的なCORS設定は、Apacheのmod_headersモジュールを利用します。これにより、レスポンスヘッダーを簡単に追加・制御できます。

mod_headersモジュールの有効化


まず、Apacheでmod_headersが有効であることを確認します。有効でない場合は、以下のコマンドでモジュールを有効にします。

a2enmod headers
systemctl restart apache2

基本的なCORS設定例


特定のオリジンからのアクセスを許可する基本的なCORS設定は次の通りです。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://example.com"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>


これにより、https://example.comからのGET、POST、およびOPTIONSリクエストが許可されます。

すべてのオリジンを許可する場合


開発環境などでは、すべてのオリジンを許可する設定が便利です。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>


ただし、セキュリティの観点から、本番環境では特定のオリジンだけを許可する設定が推奨されます。

OPTIONSメソッドへの対応


CORSはプリフライトリクエスト(OPTIONSメソッド)を行う場合があります。以下のように、OPTIONSメソッドに対して適切にレスポンスを返す設定を行います。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>


これにより、プリフライトリクエストが正しく処理され、CORSの要件が満たされます。

.htaccessを使ったCORS設定


Apacheでは、.htaccessファイルを利用してディレクトリ単位でCORS設定を行うことができます。これにより、特定のディレクトリやプロジェクトに対して柔軟にCORSポリシーを適用でき、グローバルな設定を変更せずに細かい制御が可能です。

.htaccessファイルの作成または編集


対象のディレクトリ(例: /var/www/html)に.htaccessファイルを作成するか、既存のファイルを編集します。

nano /var/www/html/.htaccess

.htaccessでの基本的なCORS設定


以下の例は、特定のオリジンhttps://example.comからのアクセスを許可する設定です。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://example.com"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>


これにより、指定したディレクトリ配下のリソースに対してCORSが適用されます。

複数のオリジンを許可する方法


複数のオリジンからのアクセスを許可する場合、動的な切り替えが必要ですが、静的に許可するオリジンを複数設定することも可能です。

<IfModule mod_headers.c>
    SetEnvIf Origin "https://example1.com" ORIGIN_OK
    SetEnvIf Origin "https://example2.com" ORIGIN_OK
    Header set Access-Control-Allow-Origin "%{HTTP_ORIGIN}e" env=ORIGIN_OK
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>


この設定では、https://example1.comおよびhttps://example2.comからのアクセスのみを許可します。

すべてのオリジンを許可する設定


開発環境では、すべてのオリジンを許可する設定が役立ちます。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>


ただし、セキュリティ上のリスクがあるため、本番環境では使用を避けるべきです。

プリフライトリクエストへの対応


CORSのプリフライトリクエスト(OPTIONSメソッド)に対応するためには、以下の設定を追加します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]


これにより、ApacheがOPTIONSリクエストに正しく応答し、プリフライトリクエストが正常に処理されます。

サーバーレベルでのCORS設定


ApacheでCORSをサーバーレベルで設定する場合は、メインの設定ファイルであるhttpd.confや仮想ホスト設定ファイルを編集します。これにより、サーバー全体または特定のサイトに対して一括でCORSポリシーを適用できます。

サーバーレベルでの設定は、サイトごとに.htaccessを管理する手間を省き、一元的に制御できるメリットがあります。特に、多数のディレクトリやドメインを扱うサーバーでは有効な方法です。

httpd.confファイルの編集


Apacheのメイン設定ファイルhttpd.confを編集します。場所は通常以下のいずれかです:

  • /etc/apache2/apache2.conf(Debian系)
  • /etc/httpd/conf/httpd.conf(CentOS/RHEL系)
sudo nano /etc/apache2/apache2.conf

基本的なCORS設定の記述


すべてのサイトに対してCORSを有効にする場合、以下のように設定します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>


特定のオリジンだけを許可する場合は、次のように記述します。

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "https://example.com"
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

仮想ホストごとの設定


仮想ホストごとに異なるCORS設定を適用したい場合は、各仮想ホスト設定ファイル(/etc/apache2/sites-available/000-default.confなど)を編集します。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        <IfModule mod_headers.c>
            Header set Access-Control-Allow-Origin "https://api.example.com"
            Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
            Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
        </IfModule>
    </Directory>
</VirtualHost>


この設定により、example.comのリソースに対して、https://api.example.comからのアクセスが許可されます。

設定の反映と確認


設定を反映させるために、Apacheを再起動します。

sudo systemctl restart apache2


動作確認は、ブラウザの開発者ツールやcurlコマンドを使用して、CORSヘッダーが正しく返されているかを確認します。

curl -I https://example.com

注意点

  • サーバーレベルでのCORS設定は、すべてのリソースに適用されるため、細かい制御が必要な場合は.htaccessでの設定が推奨されます。
  • セキュリティを考慮し、*を使用する際は開発環境のみで運用し、本番環境ではオリジンを限定しましょう。

CORS設定を動的に切り替える方法


CORS設定を動的に切り替えることで、特定の条件やリクエストに応じて異なるオリジンを許可することが可能になります。これは、複数のフロントエンドアプリケーションやAPIクライアントが存在する場合に役立ちます。静的なCORS設定ではすべてのオリジンを許可するか、特定のオリジンだけを許可する方法しかありませんが、動的設定ではより柔軟なアクセス制御が行えます。

Apacheでは、mod_rewritemod_headersを組み合わせることで、動的なCORS設定を実現できます。これにより、リクエストのOriginヘッダーに応じてCORSポリシーを切り替えることが可能です。

動的CORS切り替えの概要


動的CORSでは、以下の流れで処理が行われます:

  1. クライアントがOriginヘッダーを付与してリクエストを送信
  2. ApacheがOriginを読み取り、許可リストと照合
  3. 許可されたオリジンの場合のみAccess-Control-Allow-Originヘッダーを付与

mod_rewriteとmod_headersを活用した動的CORS

必要なモジュールの有効化

a2enmod rewrite
a2enmod headers
systemctl restart apache2

設定例:リクエストのOriginヘッダーに基づくCORS


Apacheの仮想ホスト設定または.htaccessに以下の記述を追加します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:Origin} ^(https?://(www\.)?(example1\.com|example2\.com))$ [NC]
    RewriteRule .* - [E=ORIGIN_OK:%{HTTP:Origin}]
</IfModule>

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

コードの解説

  • RewriteCond: リクエストのOriginヘッダーがexample1.comまたはexample2.comに一致する場合、環境変数ORIGIN_OKOriginを格納します。
  • RewriteRule: すべてのリクエストに対してこのルールが適用されます。
  • Header set: 環境変数ORIGIN_OKが存在する場合のみ、Access-Control-Allow-Originヘッダーを付与します。

すべてのオリジンを許可しないようにするための設定


許可されていないオリジンに対しては、CORSヘッダーを返さないようにします。これにより、安全性を保ちながら柔軟なアクセス制御が可能になります。

許可するオリジンの追加


example1.comexample2.com以外のオリジンを許可したい場合は、RewriteCondを追加します。

RewriteCond %{HTTP:Origin} ^(https?://(www\.)?(example3\.com|example4\.com))$ [NC]

プリフライトリクエスト(OPTIONSメソッド)への対応


CORSでは、プリフライトリクエストが頻繁に送信されます。以下の設定でOPTIONSメソッドを許可します。

<IfModule mod_headers.c>
    Header always set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
    Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule .* - [R=200,L]
</IfModule>


この設定で、プリフライトリクエストに対して適切なCORSヘッダーが返され、リクエストがスムーズに処理されます。

動作確認


ブラウザの開発者ツールで、リクエスト時にAccess-Control-Allow-Originヘッダーが動的に変更されていることを確認します。

curl -I -H "Origin: https://example1.com" https://api.example.com


Access-Control-Allow-Origin: https://example1.comが返されていれば成功です。

RewriteRuleとHeaderディレクティブの活用


ApacheでCORS設定を動的に切り替える際、mod_rewritemod_headersを組み合わせることで、リクエストの内容に応じた柔軟な制御が可能になります。RewriteRuleはリクエストの条件分岐を担当し、Headerディレクティブはレスポンスヘッダーの追加を行います。これにより、CORSヘッダーをリクエストごとに切り替えることができます。

RewriteRuleとHeaderの基本動作

  1. クライアントからのリクエストをRewriteCondで判定し、Originを特定します。
  2. 許可されたオリジンに基づき、HeaderディレクティブでAccess-Control-Allow-Originヘッダーをセットします。
  3. 不許可のオリジンにはCORSヘッダーを返さず、セキュリティを維持します。

RewriteRuleとHeaderを使った動的CORS設定例


以下のコードは、example1.comexample2.comのリクエストに対してのみ、CORSを許可する例です。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:Origin} ^(https?://(www\.)?(example1\.com|example2\.com))$ [NC]
    RewriteRule .* - [E=ORIGIN_OK:%{HTTP:Origin}]
</IfModule>

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

コードの詳細解説

  • RewriteCond: リクエストのOriginexample1.comまたはexample2.comに一致する場合にマッチします。正規表現でオリジンのパターンを指定します。
  • RewriteRule: 条件が満たされた場合にORIGIN_OKという環境変数にOriginを格納します。
  • Header set: 環境変数ORIGIN_OKが存在する場合のみAccess-Control-Allow-Originヘッダーを設定します。

オリジンごとの詳細制御


特定のメソッドやヘッダーをオリジンごとに異なる値で返すことも可能です。以下の例では、example1.comにはすべてのメソッドを許可し、example2.comにはGETとPOSTのみを許可します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:Origin} ^https://example1\.com$ [NC]
    RewriteRule .* - [E=METHODS:GET,POST,PUT,DELETE]

    RewriteCond %{HTTP:Origin} ^https://example2\.com$ [NC]
    RewriteRule .* - [E=METHODS:GET,POST]
</IfModule>

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "%{HTTP:Origin}"
    Header set Access-Control-Allow-Methods "%{METHODS}e" env=METHODS
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

プリフライトリクエストへの対応


OPTIONSメソッドを受けた場合に適切なレスポンスを返すための設定を追加します。これにより、プリフライトリクエストが正しく処理されます。

<IfModule mod_headers.c>
    Header always set Access-Control-Allow-Origin "%{HTTP:Origin}" env=ORIGIN_OK
    Header always set Access-Control-Allow-Methods "%{METHODS}e" env=METHODS
    Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule .* - [R=200,L]
</IfModule>

設定のポイント

  • RewriteCondの柔軟性: 正規表現を用いて、複数のオリジンを1行で記述できます。
  • 環境変数の活用: RewriteRuleで設定した環境変数をHeaderディレクティブが参照することで、リクエストごとに異なるヘッダーを返す仕組みを構築できます。
  • OPTIONSメソッドの処理: プリフライトリクエストはCORSの動作に不可欠であり、適切に処理しないとブラウザ側でリクエストがブロックされる可能性があります。

動作確認


以下のコマンドでCORS設定が正しく動作しているか確認します。

curl -I -H "Origin: https://example1.com" https://api.example.com


期待通りのAccess-Control-Allow-Originが返されているかを確認し、必要に応じて設定を微調整します。

実際の設定例


ここでは、Apacheで動的にCORS設定を切り替える具体的なサンプルコードを示します。リクエストのOriginヘッダーに応じて、異なるオリジンを許可する方法を実装します。

この例では、特定のオリジン(example1.comexample2.com)からのリクエストを許可し、それ以外のオリジンにはCORSヘッダーを返しません。

仮想ホスト設定例


以下のコードをApacheの仮想ホスト設定ファイル(例:/etc/apache2/sites-available/000-default.conf)に追加します。

<VirtualHost *:80>
    ServerName api.example.com
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{HTTP:Origin} ^https://(www\.)?(example1\.com|example2\.com)$ [NC]
            RewriteRule .* - [E=ORIGIN_OK:%{HTTP:Origin}]
        </IfModule>

        <IfModule mod_headers.c>
            Header set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
            Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
            Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
        </IfModule>

        # プリフライトリクエストの処理
        <IfModule mod_rewrite.c>
            RewriteCond %{REQUEST_METHOD} OPTIONS
            RewriteRule .* - [R=200,L]
        </IfModule>
    </Directory>

    # ログ出力
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

コード解説

  • RewriteCond:リクエストのOriginヘッダーがhttps://example1.comまたはhttps://example2.comに一致した場合に環境変数ORIGIN_OKをセットします。
  • RewriteRule:すべてのリクエストに対してこのルールが適用されますが、環境変数が設定された場合のみAccess-Control-Allow-Originがレスポンスに追加されます。
  • Header set:CORS関連のヘッダーがORIGIN_OKに応じて動的に設定されます。
  • プリフライト対応:OPTIONSメソッドのリクエストがあった場合に即座に200 OKを返します。

.htaccessでの設定例


.htaccessファイルでも同様の設定を行うことができます。特定のディレクトリ配下に対してCORS設定を適用したい場合は、以下のように記述します。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:Origin} ^https://(www\.)?(example1\.com|example2\.com)$ [NC]
    RewriteRule .* - [E=ORIGIN_OK:%{HTTP:Origin}]
</IfModule>

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "%{ORIGIN_OK}e" env=ORIGIN_OK
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule .* - [R=200,L]
</IfModule>

動作確認


動的CORS設定が正しく動作しているかを確認するために、以下のコマンドでリクエストを送信します。

curl -I -H "Origin: https://example1.com" https://api.example.com

期待するレスポンス例:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example1.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, Content-Type

トラブルシューティング

  • CORSヘッダーが返されない場合
  • mod_headersmod_rewriteが有効になっているか確認します。
  • a2enmod headers rewriteでモジュールを有効にし、Apacheを再起動します。
  • プリフライトリクエストが拒否される場合
  • OPTIONSメソッドの処理が正しく設定されているか確認してください。
  • .htaccessファイルに誤りがないか見直します。

この設定例を参考にして、セキュアで柔軟なCORS管理を実現しましょう。

動作確認とトラブルシューティング


CORS設定が正しく動作しているかを確認し、問題が発生した場合に迅速に対応することが重要です。ここでは、Apacheの動的CORS設定の検証方法と、よくあるエラーの解決方法を紹介します。

動作確認の方法

1. curlコマンドでの確認

curlコマンドを使用して、CORSヘッダーが正しく返されているか確認します。

curl -I -H "Origin: https://example1.com" https://api.example.com


期待するレスポンス例

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example1.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: X-Requested-With, Content-Type
  • Access-Control-Allow-OriginがリクエストしたOriginと一致しているか確認します。
  • 設定したHTTPメソッドやヘッダーが適切に返されているかを確認します。

2. ブラウザの開発者ツールで確認

  1. ChromeなどのブラウザでF12キーを押して「開発者ツール」を開きます。
  2. ネットワークタブでAPIリクエストを確認し、レスポンスヘッダーにAccess-Control-Allow-Originが含まれているか確認します。
  3. プリフライトリクエスト(OPTIONS)が行われている場合も同様に確認します。

よくあるエラーと対処方法

1. CORSエラーが発生する(No ‘Access-Control-Allow-Origin’ header)

原因Access-Control-Allow-Originヘッダーがレスポンスに含まれていない。
解決策

  • Apacheの設定が正しく反映されているか確認します。
  • mod_headersmod_rewriteが有効になっているかをチェックします。
a2enmod headers rewrite
systemctl restart apache2
  • RewriteCondの条件が正しく記述されているか確認します。正規表現の記述ミスがないかチェックしてください。
RewriteCond %{HTTP:Origin} ^https://(www\.)?(example1\.com|example2\.com)$ [NC]

2. OPTIONSメソッドが403エラーを返す

原因:プリフライトリクエストが拒否されている。
解決策

  • OPTIONSメソッドを許可するためのRewriteRuleが正しく設定されているか確認します。
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule .* - [R=200,L]
</IfModule>
  • .htaccessや仮想ホスト設定ファイルに設定が漏れていないか確認します。

3. プリフライトリクエストが失敗する(Invalid CORS request)

原因Access-Control-Allow-MethodsAccess-Control-Allow-Headersが不足している。
解決策

  • 必要なメソッドやヘッダーがすべて許可されているか確認します。
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type"

4. 特定のオリジンだけCORSが機能しない

原因:許可されていないオリジンからのリクエストである可能性がある。
解決策

  • RewriteCondで許可するオリジンが正しく記述されているか確認します。
  • 新しいオリジンを追加する場合は、RewriteCondを更新します。
RewriteCond %{HTTP:Origin} ^https://(www\.)?(example1\.com|example2\.com|new-origin\.com)$ [NC]

ログでエラーを確認する


Apacheのエラーログやアクセスログを確認することで、問題の原因を特定できます。

tail -f /var/log/apache2/error.log
tail -f /var/log/apache2/access.log
  • プリフライトリクエストが403で拒否されている場合や、RewriteRuleが適用されていない場合のヒントが得られます。

動作確認チェックリスト

  • [ ] mod_headersmod_rewriteが有効になっているか確認
  • [ ] Apacheを再起動して設定を反映済みか
  • [ ] OPTIONSメソッドが200 OKを返すか
  • [ ] 正しいオリジンでCORSヘッダーが返されるか
  • [ ] ブラウザやcurlで実際にリクエストを送信し、レスポンスを確認

これらの確認作業を通じて、CORS設定の問題を早期に特定し、適切に対応できるようになります。

まとめ


本記事では、ApacheでCORS設定を動的に切り替える方法について詳しく解説しました。CORSはWebアプリケーションのセキュリティと柔軟性を両立させる重要な仕組みです。

動的CORSの設定により、特定のオリジンからのリクエストのみを許可し、不要なアクセスを制限することが可能になります。mod_rewritemod_headersを組み合わせることで、柔軟にCORSポリシーを切り替える方法を紹介しました。

また、動作確認やトラブルシューティングの方法を通じて、実際の運用で発生する可能性のある問題への対処法も学びました。適切なCORS管理は、セキュリティ向上だけでなく、パフォーマンスや開発効率の向上にも寄与します。

CORS設定をしっかりと理解し、プロジェクトに合わせた柔軟な設定を行うことで、安全でスムーズなWebアプリケーションの運用を実現しましょう。

コメント

コメントする

目次