Rails + Nginx 設定 CORS

2018-02-11

使用 Rails 建置 API,跨網域存取時,瀏覽器會需要通過 CORS (Cross-Origin Resource Sharing) 的 policy 才允許將取得的資料回傳給 JavaScript。

否則會出現錯誤訊息:No 'Access-Control-Allow-Origin' header is present on the requested resource.

Rails 的設定是在 config/application.rb 加上如下:

config.action_dispatch.default_headers = {
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Request-Method' => %w{GET POST}.join(",")
}

Rails 5 可以參考〈Rails 5 API and CORS〉,不過我在 Rails 5.1.4 沒有試成功。

Serving static files

如果是 public 資料夾下的靜態檔案,在 production server 上是由 web server 上負責服務,所以要設定 web server.

nginx 是在 server block 設定如下:

server {
    server_name example.com;
    add_header Access-Control-Allow-Origin sub.example.com; # < 這是所需的 header
    # 以下是設定檔的其餘部份
}