防止Nginx删除由机架式芯设置的CORS标头

时间:2019-07-17 10:43:35

标签: ruby-on-rails nginx cors x-accel-redirect rack-cors

上下文

我使用Docker将带有nginx容器的Rails应用程序部署为前端HTTP服务器。

我在Rails中配置了“机架式”以发送一些URL的CORS标头。

我的应用程序可以使用HTTPS在2个不同的域中使用,它们在nginx中配置为2个不同的server配置。第一个配置为default_server

nginx和Rails之间的内部通信使用HTTP。 HTTPS仅在nginx中配置。

要清楚,CORS标头的意思是:

  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methods
  • Access-Control-Expose-Headers
  • Access-Control-Max-Age

我正在使用rack-cors 1.0.2和nginx 1.16.0。

我创建了a Gist with my nginx configuration

问题

通过HTTPS使用第二个域时,nginx会删除我由rack-cors设置的CORS标头。

我知道它们已被删除,因为我监视了多件事:

  • 我将rack-cors置于调试模式,并且它在Rails日志中正确输出了CORS标头。
  • 我从nginx容器中直接对Rails进行了查询,并且响应中包含CORS标头。
  • 我使用tcpdump监视了nginx对Rails的查询/响应,并且响应包含CORS标头。

但是nginx对最终用户的响应不包含CORS标头。

一直以来,发送给第一个域的响应都可以,并且包含CORS标头。

问题

  • nginx为什么要从上游响应中删除这些标头?
  • 如何在nginx中监视此行为?
  • 如何防止nginx重写这些响应?

谢谢

0 个答案:

没有答案