docker 容器内的 nginx 不会根据 conf 文件添加 access-control-allow-origin header

nginx inside a docker container doesn't add access-control-allow-origin header as per the conf file

tl;dr - 当运行在 docker 容器中使用 nginx 时,如何在 nginx 响应中显式添加特定的 header?

我已经使用 sebp/elk:latest 映像在 RHEL 7.1 上的 docker 容器内部署了 ELK 堆栈。除了 Kibana 图之外,我还想渲染我自己开发的散点图。我正在通过我安装的单独的 nginx 网络服务器和 运行 在同一 docker 图像中呈现这些页面。这是因为 Kibana 4(在 sebp 图像中)没有自由选择另一个 Web 服务器,如 Kibana 3,而且我无法编辑 Kibana 4 呈现的 URL/页面,因为它使用自己的内置 non-nginx 据我所知网络服务器。现在,问题是,当我将 scatterplts 部署到 nginx 根位置并从浏览器检索时,出现以下错误。

XMLHttpRequest 无法加载 http:///_search?size=500&。请求的资源上不存在 'Access-Control-Allow-Origin' header。因此不允许访问来源“http://IP-of-my-server”。

我在 运行没有 docker 的 ELK 时遇到过这个问题,但是这个 link 帮助了我 - http://enable-cors.org/server_nginx.html

现在它似乎不起作用,我在构建 docker 图像时将 conf 从主机推送到容器,当容器从图像旋转起来时,我可以登录并看到 nginx 是运行ning 和我的 nginx.conf 正在被使用,但是当我分析实际响应时,没有这样的 header 被添加到响应中,即使它应该像我在 nginx 中添加的那样。

正在使用 Nginx 1.4。不存在端口映射问题,我没有 运行 在主机上安装任何 nginx,因为你们中的一些人可能怀疑这些页面是否真的由容器或主机的 nginx 呈现。

如果您遇到此问题并已解决,请提供帮助。如果您从容器内部 运行ning 网络服务器或 docker 中存在错误或我的 nginx 版本不支持 add_header,header 是否会添加到响应中?

当我打开 chrome 的 session 并禁用网络安全时,我在 chrome 中得到了完美的散点图。

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

所以散点图代码或其他东西肯定没有任何问题。只有 header 在响应中不存在,即使我明确尝试通过 conf/

添加它

提前致谢,抱歉有点长post。

刚刚意识到问题出在 elasticsearch 响应上,而不是在 nginx conf 中。如果你仔细看到 header 不存在于 :9200 的响应中,那么有一个名为 "http" 的模块,你可以在 elasticsearch.yml 文件中编辑它的属性。

以下 link 帮助,必须允许 header 通过其 API。

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html