skydum

個人的な作業記録とか備忘録代わりのメモ

Apache 2.4でCORSヘッダの追加

ApacheでCORSヘッダの追加

普段はAPIを作ることが多くFlaskの場合だとFlask-CORSを使うので特に意識していなかったがApacheでヘッダの追加ってどうするのだったかなと調べたので備忘録として記載。 今回はAccess-Control-Allow-Originヘッダの追加のみを記載しているが、同じ要領でヘッダを追加すればいくらでもヘッダを増やすことができる。

ヘッダの追加手順

  1. ヘッダを追加するにはmod_headersが有効になっているか確認し、無効な場合は有効化する
  2. /etc/httpd.conf.d/headers.confのファイルを作成して追加する。

mod_headersの確認

CentOSの場合はmoduleの読み込みを/etc/httpd/conf.modules.dのは以下にあるファイルの中で行われているので、ディレクトリを移動してgrepで確認してみる。 以下のように表示された場合LoadModuleの前に#がないので有効化されている

# cd /etc/httpd/conf.modules.d/
# grep headers *
00-base.conf:LoadModule headers_module modules/mod_headers.so

以下の方法でも確認できるので上記の方法でもどちらでも確認は可能
# httpd -M | grep headers_module
 headers_module (shared)

/etc/httpd/conf.d/headers.confを作成

ファイルを作成して追加したいヘッダを記載する

# vi /etc/httpd/conf.d/headers.conf
Header set Access-Control-Allow-Origin "*"

# cat /etc/httpd/conf.d/headers.conf
Header set Access-Control-Allow-Origin "*"

今回はVirtualHostへのリクエストのときだけCORSのヘッダを付けたかったので実際に設定した内容は以下となる

Listen 192.168.0.251:44444

<VirtualHost *:44444>
    DocumentRoot /var/www/hoge
    ServerName hoge.example.com

    Header set Access-Control-Allow-Origin "*"
</VirtualHost>

ヘッダ追加の確認

curlでプリフライトリクエストを送ってヘッダの追加がされているかを確認する。
今回は対象のサーバをhttp://192.168.0.251:44444する。

ヘッダを追加したVirtualHostの方

# curl -v -X OPTIONS -H "Origin;*" -H "Access-Control-Request-Method: GET" -H "Access-Control-Request-Headers: content-type" http://192.168.0.251:44444/index.html
* About to connect() to 192.168.0.251 port 44444 (#0)
*   Trying 192.168.0.251...
* Connected to 192.168.0.251 (192.168.0.251) port 44444 (#0)
> OPTIONS /index.html HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.251:44444
> Accept: */*
> Access-Control-Request-Method: GET
> Access-Control-Request-Headers: content-type
>
< HTTP/1.1 200 OK
< Date: Wed, 19 Oct 2022 13:23:42 GMT
< Server: Apache/2.4.6 (CentOS)
< Allow: OPTIONS,GET,HEAD,POST,TRACE
< Access-Control-Allow-Origin: *           ← 追加したヘッダが増えている
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host 192.168.0.251 left intact


ヘッダを追加していない方
# curl -v -X OPTIONS -H "Origin;*" -H "Access-Control-Request-Method: GET" -H "Access-Control-Request-Headers: content-type" http://192.168.0.251/index.html
* About to connect() to 192.168.0.251 port 80 (#0)
*   Trying 192.168.0.251...
* Connected to 192.168.0.251 (192.168.0.251) port 80 (#0)
> OPTIONS /index.html HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.251
> Accept: */*
> Access-Control-Request-Method: GET
> Access-Control-Request-Headers: content-type
>
< HTTP/1.1 200 OK
< Date: Wed, 19 Oct 2022 13:23:49 GMT
< Server: Apache/2.4.6 (CentOS)
< Allow: OPTIONS,GET,HEAD,POST,TRACE
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host 192.168.0.251 left intact