ApacheでCORS対応REST APIを構築する方法を徹底解説

Apacheを使用してCORS(Cross-Origin Resource Sharing)対応のREST APIを構築することは、モダンなWebアプリケーション開発において欠かせません。特に、フロントエンドとバックエンドが異なるドメインやポートで動作する場合、CORSの設定を行わないとAPIへのリクエストがブロックされてしまいます。

CORSはセキュリティの観点から設計されており、サーバーが許可していないオリジン(他のドメインやサーバー)からのリクエストを防ぎます。しかし、APIが複数のオリジンからアクセスされる必要がある場合は、CORSを適切に設定することで安全にリソースを共有できます。

本記事では、Apacheサーバーを使ってCORS対応のREST APIを構築する方法を具体的に解説します。Apacheのインストールから、CORS設定の実装方法、さらにトラブルシューティングまで段階的に説明します。これにより、APIの柔軟性を高めつつ、安全性を確保するための知識を習得できます。

目次
  1. CORSとは何か
    1. CORSが必要な理由
    2. CORSの動作原理
  2. REST APIとCORSの関係
    1. なぜREST APIでCORSが必要なのか
    2. CORSを設定しない場合の問題
    3. REST APIでのCORS設定のメリット
  3. Apacheのインストールと初期設定
    1. Apacheのインストール
    2. Apacheの初期設定
    3. ファイアウォールの設定
  4. ApacheでのCORS有効化方法
    1. 1. Apacheのヘッダーモジュールを有効化
    2. 2. Apacheの仮想ホストまたは設定ファイルを編集
    3. 3. .htaccessファイルでCORSを有効化
    4. 4. Apacheの再起動
    5. 5. CORSが正しく動作しているか確認
  5. .htaccessによるCORS設定
    1. 1. .htaccessファイルの作成・編集
    2. 2. 基本的なCORS設定
    3. 3. 特定オリジンのみ許可する設定
    4. 4. 複数オリジンの動的許可
    5. 5. OPTIONSメソッドの対応(プリフライトリクエスト)
    6. 6. Apacheの再起動
    7. 7. 動作確認
  6. 特定オリジンのみ許可する方法
    1. 1. 設定ファイルで特定オリジンを許可
    2. 2. 複数のオリジンを許可する方法
    3. 3. セキュリティ強化のポイント
    4. 4. Apacheの再起動
    5. 5. 設定確認
  7. HTTPメソッドの制御とカスタマイズ
    1. 1. 基本的なHTTPメソッドの制御
    2. 2. メソッドごとに異なるCORS設定を適用
    3. 3. OPTIONSメソッドの特別対応(プリフライトリクエスト)
    4. 4. 不許可メソッドへの対応
    5. 5. Apacheの再起動と動作確認
    6. 6. 動作確認
  8. CORS設定のデバッグ方法
    1. 1. ブラウザの開発者ツールを活用
    2. 2. curlコマンドでCORSヘッダーを確認
    3. 3. Apacheログの確認
    4. 4. プリフライトリクエストの確認
    5. 5. CORS設定の一時的緩和(デバッグ用)
    6. 6. Apacheモジュールの確認
    7. 7. .htaccessの設定ミス確認
    8. 8. 結果の確認
  9. まとめ

CORSとは何か


CORS(Cross-Origin Resource Sharing)は、Webブラウザが異なるオリジン(ドメイン、プロトコル、ポートの組み合わせ)からのリソースへのアクセスを制御する仕組みです。通常、セキュリティ上の理由から、Webブラウザは異なるオリジンへのリクエストを制限しています。この制約を「同一オリジンポリシー」と呼びます。

CORSは、この同一オリジンポリシーの制約を緩和し、安全に異なるオリジン間でデータをやり取りできるようにするための仕組みです。たとえば、フロントエンドがhttps://example.comで動作しており、バックエンドAPIがhttps://api.example.comでホストされている場合、通常はアクセスが制限されますが、CORSを適切に設定することで通信が可能になります。

CORSが必要な理由

  • セキュリティの確保:不正なサイトがユーザーの情報を窃取することを防ぎます。
  • リソース共有の効率化:複数のサーバー間でリソースを分散し、APIの運用をスムーズにします。
  • モダンなアーキテクチャ対応:フロントエンドとバックエンドが異なるサーバーで動作するマイクロサービス環境では必須です。

CORSの動作原理


CORSは、サーバーがリクエスト元のオリジンを検証し、アクセスを許可するかどうかを決定します。

  1. プリフライトリクエスト:本リクエストの前に、OPTIONSメソッドでサーバーがアクセスを許可しているか確認します。
  2. 本リクエスト:サーバーが許可した場合にのみ、実際のGETPOSTなどのリクエストが送信されます。
  3. レスポンスヘッダー:サーバーは、Access-Control-Allow-Originなどのヘッダーを通じて、どのオリジンがアクセス可能かを示します。

CORSを理解することで、異なるオリジン間でのリソース共有が可能となり、より柔軟でセキュアなWebアプリケーションを構築できます。

REST APIとCORSの関係


REST APIは、Webアプリケーションやモバイルアプリケーションがサーバーと通信するための標準的なインターフェースです。フロントエンドとバックエンドが異なるオリジンで動作するケースが増える中、CORSの設定はREST APIの正常な動作に欠かせません。

なぜREST APIでCORSが必要なのか


REST APIは、外部クライアント(ブラウザやモバイルアプリ)から頻繁にアクセスされます。このとき、フロントエンドとバックエンドが異なるドメインでホストされていると、ブラウザは同一オリジンポリシーによりAPIリクエストをブロックします。
例えば:

  • フロントエンド:https://frontend.example.com
  • REST API:https://api.example.com

このような場合、APIがCORSを許可していないとリクエストは失敗します。CORSを適切に設定することで、異なるオリジン間でも安全に通信が可能になります。

CORSを設定しない場合の問題


CORSが設定されていないと、次のような問題が発生します。

  • APIリクエストがブロックされる:ブラウザが「アクセス拒否エラー」を返し、APIのレスポンスが受け取れません。
  • 開発の遅延:フロントエンドとバックエンドの統合テストが行えず、開発プロセスが停滞します。
  • ユーザー体験の低下:外部サービスと連携できないため、アプリの機能が制限されます。

REST APIでのCORS設定のメリット

  • セキュリティを維持しつつ柔軟なアクセスを許可:特定のオリジンのみアクセスを許可することで、不正なリクエストを防止します。
  • モバイルアプリケーションやサードパーティとの連携:外部アプリケーションがAPIを安全に利用できるようになります。
  • 負荷分散とスケーラビリティ:バックエンドAPIを複数のドメインで分散してもスムーズに運用可能です。

CORSは、REST APIのセキュリティと利便性のバランスを保つ重要な技術です。次項では、ApacheでREST APIのCORSを有効にする具体的な方法について解説します。

Apacheのインストールと初期設定


REST APIをApacheで運用するためには、Apache HTTPサーバーのインストールと初期設定が必要です。ここでは、Apacheのセットアップ方法から基本的な設定までを順を追って説明します。

Apacheのインストール


まずはApacheをサーバーにインストールします。使用するOSによって手順が異なりますが、代表的なLinuxディストリビューションを例に解説します。

Ubuntu / Debianの場合

sudo apt update  
sudo apt install apache2  


インストールが完了したら、Apacheサービスを起動して有効化します。

sudo systemctl start apache2  
sudo systemctl enable apache2  

CentOS / RHELの場合

sudo yum install httpd  


続いてApacheを起動し、自動起動を有効化します。

sudo systemctl start httpd  
sudo systemctl enable httpd  

Windowsの場合

  1. Apache Lounge からWindows用Apacheをダウンロードします。
  2. 解凍後、httpd.exeを実行してインストールします。

Apacheの初期設定


インストールが完了したら、Apacheの初期設定を行います。設定ファイルは通常、以下の場所にあります。

  • Ubuntu / Debian: /etc/apache2/apache2.conf
  • CentOS / RHEL: /etc/httpd/conf/httpd.conf

サーバー名の設定


ServerNameディレクティブを設定し、サーバーのホスト名を明示します。

sudo nano /etc/apache2/apache2.conf  


以下の行を追加または編集します。

ServerName localhost  


設定後、Apacheを再起動します。

sudo systemctl restart apache2  

ファイアウォールの設定


ファイアウォールでHTTPおよびHTTPSトラフィックを許可します。

sudo ufw allow 'Apache Full'  

これでApacheが稼働し、REST APIの準備が整いました。次に、CORSを有効化してREST APIが外部オリジンからアクセスできるように設定します。

ApacheでのCORS有効化方法


REST APIが異なるオリジンからアクセスされるようにするためには、ApacheでCORS(Cross-Origin Resource Sharing)を有効にする必要があります。ここでは、Apacheの設定ファイルを編集し、CORSを許可する具体的な方法を解説します。

1. Apacheのヘッダーモジュールを有効化


CORS設定にはHTTPレスポンスヘッダーを操作するmod_headersモジュールが必要です。まず、このモジュールが有効になっているか確認し、無効であれば有効化します。

Ubuntu / Debianの場合

sudo a2enmod headers  
sudo systemctl restart apache2  

CentOS / RHELの場合


mod_headersはデフォルトで有効ですが、以下のコマンドで再度読み込むことができます。

sudo systemctl restart httpd  

2. Apacheの仮想ホストまたは設定ファイルを編集


CORSを有効化するために、/etc/apache2/sites-available/000-default.confなどの仮想ホストファイル、またはapache2.confを編集します。

sudo nano /etc/apache2/sites-available/000-default.conf  

以下のように<VirtualHost>内にCORS設定を追加します。

<VirtualHost *:80>  
    ServerAdmin webmaster@localhost  
    DocumentRoot /var/www/html  

    <Directory /var/www/html>  
        Options Indexes FollowSymLinks  
        AllowOverride All  
        Require all granted  
    </Directory>  

    # CORS設定  
    Header set Access-Control-Allow-Origin "*"  
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE"  
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"  

    ErrorLog ${APACHE_LOG_DIR}/error.log  
    CustomLog ${APACHE_LOG_DIR}/access.log combined  
</VirtualHost>  

3. .htaccessファイルでCORSを有効化


サーバー全体ではなく特定のディレクトリに対してCORSを有効化したい場合は、.htaccessファイルを使用します。

sudo nano /var/www/html/.htaccess  

以下の設定を追加します。

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

4. Apacheの再起動


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

sudo systemctl restart apache2  

5. CORSが正しく動作しているか確認


ブラウザの開発者ツールを使用してAPIリクエストを確認し、CORSヘッダーが含まれているかをチェックします。また、curlコマンドでも確認可能です。

curl -I http://localhost/api  


出力例:

HTTP/1.1 200 OK  
Access-Control-Allow-Origin: *  
Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE  

これでApacheでCORSが有効化され、異なるオリジンからREST APIへアクセスできるようになります。次は、.htaccessを使ったより柔軟なCORS設定方法について説明します。

.htaccessによるCORS設定


.htaccessファイルを使用することで、Apacheのグローバル設定を変更せずに特定のディレクトリやアプリケーション単位でCORSを設定できます。これにより、APIの柔軟なアクセス制御が可能になります。

1. .htaccessファイルの作成・編集


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

sudo nano /var/www/html/.htaccess  

2. 基本的なCORS設定


以下の内容を.htaccessに記述し、すべてのオリジンからのアクセスを許可します。

<IfModule mod_headers.c>  
    Header set Access-Control-Allow-Origin "*"  
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE"  
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"  
</IfModule>  
  • Access-Control-Allow-Origin "*":すべてのオリジンからのアクセスを許可
  • Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE":許可するHTTPメソッドを指定
  • Access-Control-Allow-Headers "Authorization, Content-Type":リクエストヘッダーの指定

3. 特定オリジンのみ許可する設定


特定のドメインだけにアクセスを許可する場合は、*の代わりにオリジンを指定します。

<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 "Authorization, Content-Type"  
</IfModule>  


これにより、https://example.comからのアクセスのみ許可されます。複数のオリジンを許可する場合は、動的にオリジンを指定する方法が必要です。

4. 複数オリジンの動的許可


.htaccessで複数オリジンを許可する場合、正規表現や条件分岐が必要です。以下はその例です。

<IfModule mod_headers.c>  
    SetEnvIf Origin "https://(example\.com|another\.com)$" AccessControlAllowOrigin=$0  
    Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin  
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"  
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"  
</IfModule>  
  • SetEnvIfでオリジンを判定し、AccessControlAllowOriginという環境変数に保存
  • 許可されたオリジンのみCORSヘッダーに反映

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


CORSはプリフライトリクエストとしてOPTIONSメソッドが送信されます。これを許可するための設定を追加します。

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

6. Apacheの再起動


設定が完了したら、Apacheを再起動して変更を反映させます。

sudo systemctl restart apache2  

7. 動作確認


ブラウザの開発者ツールやcurlコマンドでレスポンスヘッダーを確認し、CORSが有効になっていることを確認します。

curl -I http://localhost/api  


出力例:

HTTP/1.1 200 OK  
Access-Control-Allow-Origin: https://example.com  
Access-Control-Allow-Methods: GET, POST, OPTIONS  

.htaccessを活用することで、APIごとに異なるCORS設定を行うことが可能になります。次は、特定のオリジンだけを許可する方法について詳しく解説します。

特定オリジンのみ許可する方法


CORS設定でセキュリティを強化するためには、すべてのオリジンからのアクセスを許可するのではなく、特定のオリジンだけを許可する方法が推奨されます。これにより、不正なサイトや外部からの不適切なアクセスを防ぐことができます。

1. 設定ファイルで特定オリジンを許可


Apacheの設定ファイルや.htaccessで特定のオリジンを明示的に指定します。

Apacheの設定ファイルを編集する場合

sudo nano /etc/apache2/sites-available/000-default.conf  

以下のようにAccess-Control-Allow-Originで特定のドメインだけを許可します。

<VirtualHost *:80>  
    ServerAdmin webmaster@localhost  
    DocumentRoot /var/www/html  

    <Directory /var/www/html>  
        Options Indexes FollowSymLinks  
        AllowOverride All  
        Require all granted  
    </Directory>  

    # 特定オリジンの許可  
    <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 "Authorization, Content-Type"  
    </IfModule>  

    ErrorLog ${APACHE_LOG_DIR}/error.log  
    CustomLog ${APACHE_LOG_DIR}/access.log combined  
</VirtualHost>  

.htaccessで特定オリジンを許可する場合


特定ディレクトリの.htaccessファイルでも同様に設定できます。

sudo nano /var/www/html/.htaccess  

以下を追加します。

<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 "Authorization, Content-Type"  
</IfModule>  


この設定では、https://example.comからのリクエストのみ許可されます。

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


特定の複数のオリジンを許可する場合は、正規表現やSetEnvIfを使った動的な制御が必要です。

<IfModule mod_headers.c>  
    SetEnvIf Origin "https://(example\.com|another\.com)$" AccessControlAllowOrigin=$0  
    Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin  
    Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"  
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"  
</IfModule>  
  • example.comanother.comからのリクエストを許可します。
  • 設定は動的に適用され、リクエスト元のオリジンに応じて適切なレスポンスが返されます。

3. セキュリティ強化のポイント

  • ワイルドカード(*)は避ける:すべてのオリジンを許可する*は便利ですが、セキュリティリスクが高くなります。
  • 信頼できるドメインのみ許可:特定のオリジンだけを許可し、不必要なオリジンを排除します。
  • プリフライトリクエストを確認OPTIONSメソッドを利用したプリフライトリクエストも正しく処理するように設定します。

4. Apacheの再起動


設定後はApacheを再起動して変更を反映させます。

sudo systemctl restart apache2  

5. 設定確認


curlコマンドで特定オリジンが許可されているか確認します。

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


出力例:

HTTP/1.1 200 OK  
Access-Control-Allow-Origin: https://example.com  

この方法で特定のオリジンのみを許可するCORS設定が完了します。これにより、安全性が向上し、必要なオリジンだけがAPIにアクセス可能となります。

HTTPメソッドの制御とカスタマイズ


REST APIでは、GETPOSTPUTDELETEなどのHTTPメソッドを利用します。ApacheでCORSを設定する際、特定のメソッドだけを許可することでAPIのセキュリティを強化できます。例えば、GETリクエストは許可するが、DELETEは許可しないといった制御が可能です。

1. 基本的なHTTPメソッドの制御


Apacheの設定ファイルまたは.htaccessで、特定のメソッドだけを許可する設定を行います。

Apacheの設定ファイル例

sudo nano /etc/apache2/sites-available/000-default.conf  

以下のように記述します。

<VirtualHost *:80>  
    ServerAdmin webmaster@localhost  
    DocumentRoot /var/www/html  

    <Directory /var/www/html>  
        Options Indexes FollowSymLinks  
        AllowOverride All  
        Require all granted  
    </Directory>  

    # 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 "Authorization, Content-Type"  
    </IfModule>  

    ErrorLog ${APACHE_LOG_DIR}/error.log  
    CustomLog ${APACHE_LOG_DIR}/access.log combined  
</VirtualHost>  
  • Access-Control-Allow-MethodsGET, POST, OPTIONSのみを指定しています。
  • PUTDELETEは許可されません。

.htaccessでの設定例


特定ディレクトリごとにメソッドを制限する場合は、.htaccessファイルに以下を記述します。

sudo nano /var/www/html/.htaccess  
<IfModule mod_headers.c>  
    Header set Access-Control-Allow-Origin "https://example.com"  
    Header set Access-Control-Allow-Methods "GET, POST"  
    Header set Access-Control-Allow-Headers "Authorization, Content-Type"  
</IfModule>  


これにより、GETPOSTのみが許可され、他のメソッドはブロックされます。

2. メソッドごとに異なるCORS設定を適用


メソッドごとに異なるCORSポリシーを設定することも可能です。

<IfModule mod_headers.c>  
    <FilesMatch ".*">  
        SetEnvIf Request_Method "GET" AccessControlAllowOrigin=https://example.com  
        SetEnvIf Request_Method "POST" AccessControlAllowOrigin=https://api.example.com  
        Header set Access-Control-Allow-Origin "%{AccessControlAllowOrigin}e" env=AccessControlAllowOrigin  
        Header set Access-Control-Allow-Methods "%{Request_Method}e"  
    </FilesMatch>  
</IfModule>  
  • GETリクエストはexample.comからのアクセスのみ許可。
  • POSTリクエストはapi.example.comからのアクセスのみ許可。

3. OPTIONSメソッドの特別対応(プリフライトリクエスト)


CORSでは、本リクエストの前にプリフライトリクエストとしてOPTIONSメソッドが送信されます。これを適切に処理することで、PUTDELETEなどのメソッドも安全に制御可能です。

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

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

4. 不許可メソッドへの対応


特定のメソッドを完全にブロックする場合は、LimitExceptディレクティブを使用します。

<Directory /var/www/html/api>  
    <LimitExcept GET POST>  
        Require all denied  
    </LimitExcept>  
</Directory>  


これにより、GETPOST以外のリクエストは拒否されます。

5. Apacheの再起動と動作確認


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

sudo systemctl restart apache2  

6. 動作確認


ブラウザやcurlを使用して、特定のメソッドが許可されていることを確認します。

curl -I -X OPTIONS http://localhost/api  
curl -I -X DELETE http://localhost/api  


許可されていないメソッドの場合は、403エラーが返されます。

これにより、APIのセキュリティを向上させ、必要なメソッドのみを柔軟に許可することが可能になります。次はCORS設定のデバッグ方法について説明します。

CORS設定のデバッグ方法


CORS設定は、正しく行わないとブラウザで「アクセスが拒否されました」や「CORSエラー」が表示され、APIが期待通りに動作しません。ここでは、CORS設定の問題を特定し、修正するためのデバッグ方法を解説します。

1. ブラウザの開発者ツールを活用


ブラウザの開発者ツールは、CORSエラーを確認する最も簡単な方法です。

  • Google Chromeの場合:右クリック →「検証」→「ネットワーク」タブを選択し、APIリクエストを確認します。
  • CORSエラーが発生している場合、コンソールに「Cross-Origin Request Blocked」や「CORS policy」関連のエラーが表示されます。

例:CORSエラーメッセージ

Access to fetch at 'https://api.example.com' from origin 'https://frontend.example.com' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


このエラーは、Access-Control-Allow-Originヘッダーが欠如していることを示しています。

2. curlコマンドでCORSヘッダーを確認


ブラウザだけでなく、curlコマンドを使ってサーバーのレスポンスヘッダーを直接確認できます。

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


確認ポイント

  • Access-Control-Allow-Originがレスポンスに含まれているか
  • 指定したオリジンが一致しているか
  • 必要なHTTPメソッドやヘッダーが許可されているか

例:正常なレスポンス

HTTP/1.1 200 OK  
Access-Control-Allow-Origin: https://frontend.example.com  
Access-Control-Allow-Methods: GET, POST, OPTIONS  
Access-Control-Allow-Headers: Authorization, Content-Type  

3. Apacheログの確認


CORSエラーが発生した際、Apacheのエラーログにもヒントが記録されます。ログを確認して、設定ミスやモジュールの不足を特定します。

sudo tail -f /var/log/apache2/error.log  


または、アクセスログも確認してリクエストがサーバーに届いているかをチェックします。

sudo tail -f /var/log/apache2/access.log  

4. プリフライトリクエストの確認


OPTIONSメソッドで送信されるプリフライトリクエストが適切に処理されているか確認します。

curl -X OPTIONS -I -H "Origin: https://frontend.example.com" https://api.example.com
  • 200レスポンスが返されない場合は、OPTIONSメソッドの処理に問題があります。
  • .htaccessやApache設定で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 "Authorization, Content-Type"  
</IfModule>  

5. CORS設定の一時的緩和(デバッグ用)


一時的にAccess-Control-Allow-Originをワイルドカード(*)に設定し、CORSエラーが解消されるか確認します。

Header set Access-Control-Allow-Origin "*"
  • エラーが解消された場合は、オリジンの指定ミスが原因です。
  • ワイルドカード設定はセキュリティリスクがあるため、デバッグ後は必ず特定のオリジンに戻します。

6. Apacheモジュールの確認


CORS設定に必要なmod_headersが有効になっているか確認します。

sudo a2enmod headers  
sudo systemctl restart apache2  


モジュールが有効になっていない場合は、CORSヘッダーが適用されません。

7. .htaccessの設定ミス確認


.htaccessでCORSを設定している場合は、Apacheが.htaccessを適切に読み込んでいるか確認します。AllowOverrideが有効でないと、.htaccessが無視されます。

<Directory /var/www/html>  
    AllowOverride All  
</Directory>  


設定後、Apacheを再起動します。

sudo systemctl restart apache2  

8. 結果の確認


すべての修正が完了したら、再度ブラウザやcurlでリクエストを行い、エラーが解消されているかを確認します。

これでCORS設定のデバッグ方法が完了です。次は、記事のまとめに進みます。

まとめ


本記事では、Apacheを用いてCORS(Cross-Origin Resource Sharing)対応のREST APIを構築する方法について解説しました。CORSは、異なるオリジン間で安全にリソースを共有するために不可欠な技術であり、特にフロントエンドとバックエンドが分離した環境では必須の設定です。

Apacheのインストールから基本設定、.htaccessを活用したCORS設定、特定オリジンの許可、HTTPメソッドの制御、さらにはデバッグ方法まで、段階的に進めることで柔軟かつセキュアなAPIを構築できるようになります。

CORS設定はセキュリティと利便性のバランスが重要です。必要最小限のオリジンとメソッドのみ許可することで、セキュリティリスクを低減し、APIの保護を強化できます。

この記事が、ApacheでのCORS対応REST API構築の参考になれば幸いです。適切な設定を施し、安全で信頼性の高いAPIを運用しましょう。

コメント

コメントする

目次
  1. CORSとは何か
    1. CORSが必要な理由
    2. CORSの動作原理
  2. REST APIとCORSの関係
    1. なぜREST APIでCORSが必要なのか
    2. CORSを設定しない場合の問題
    3. REST APIでのCORS設定のメリット
  3. Apacheのインストールと初期設定
    1. Apacheのインストール
    2. Apacheの初期設定
    3. ファイアウォールの設定
  4. ApacheでのCORS有効化方法
    1. 1. Apacheのヘッダーモジュールを有効化
    2. 2. Apacheの仮想ホストまたは設定ファイルを編集
    3. 3. .htaccessファイルでCORSを有効化
    4. 4. Apacheの再起動
    5. 5. CORSが正しく動作しているか確認
  5. .htaccessによるCORS設定
    1. 1. .htaccessファイルの作成・編集
    2. 2. 基本的なCORS設定
    3. 3. 特定オリジンのみ許可する設定
    4. 4. 複数オリジンの動的許可
    5. 5. OPTIONSメソッドの対応(プリフライトリクエスト)
    6. 6. Apacheの再起動
    7. 7. 動作確認
  6. 特定オリジンのみ許可する方法
    1. 1. 設定ファイルで特定オリジンを許可
    2. 2. 複数のオリジンを許可する方法
    3. 3. セキュリティ強化のポイント
    4. 4. Apacheの再起動
    5. 5. 設定確認
  7. HTTPメソッドの制御とカスタマイズ
    1. 1. 基本的なHTTPメソッドの制御
    2. 2. メソッドごとに異なるCORS設定を適用
    3. 3. OPTIONSメソッドの特別対応(プリフライトリクエスト)
    4. 4. 不許可メソッドへの対応
    5. 5. Apacheの再起動と動作確認
    6. 6. 動作確認
  8. CORS設定のデバッグ方法
    1. 1. ブラウザの開発者ツールを活用
    2. 2. curlコマンドでCORSヘッダーを確認
    3. 3. Apacheログの確認
    4. 4. プリフライトリクエストの確認
    5. 5. CORS設定の一時的緩和(デバッグ用)
    6. 6. Apacheモジュールの確認
    7. 7. .htaccessの設定ミス確認
    8. 8. 結果の確認
  9. まとめ