0

tl; dr - 在 docker 容器中运行 nginx 时,如何在 nginx 响应中显式添加特定标头?

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

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

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

现在它似乎不起作用,我在构建 docker 映像时将 conf 从主机推送到容器,当从映像启动容器时,我可以登录并看到 nginx 正在运行并且我的 nginx.conf 正在使用但是当我分析实际响应时,即使它应该是我在 nginx 中添加的那样,也没有将这样的标头添加到响应中。

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

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

当我打开一个禁用网络安全的 chrome 会话时,我在 chrome 中完美地得到了我的散点图。

chrome.exe --user-data-dir="C:/Chrome 开发会话" --disable-web-security

所以散点图代码或其他东西绝对没有任何问题。即使我明确地尝试通过 conf/ 添加它,也只是响应中不存在标题

在此先感谢,抱歉,帖子有点长。

4

1 回答 1

0

刚刚意识到问题出在弹性搜索响应上,而不是在 nginx conf 中。如果您仔细看到响应来自:9200 的标头不存在,那么有一个名为“http”的模块,您可以在 elasticsearch.yml 文件中编辑其属性。

下面的链接有帮助,必须通过其 API 允许该标头。

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

于 2016-04-07T12:23:07.373 回答