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
# 以下是設定檔的其餘部份
}