2013-12-13 24 views
5

我想代理从nginx到kibana(logstash)的请求。我可以在端口9292上访问kibana仪表板 - 我可以确认服务正在侦听端口9292.我可以成功从nginx代理到其他服务,但kibana(端口9292)的代理指令不起作用 - 我可以代理到9200用于elasticsearch。任何想法如何进一步解决这一问题将不胜感激。无法代理从nginx到kibana

更新: 我已经尝试更改上游中的服务器设置以指向0.0.0.0以及服务器地址,但两个选项都不起作用。请求被路由到默认服务器。

另一个更新: 我注意到,从nginx的默认文件中删除代理参数允许我将请求转发到kibana listneing端口 - 然而,kibana抱怨缺少的“仪表板/ default.json”这是我我猜是由于nginx中的一些缺失或错误配置的设置。

默认设置(在/ etc/nginx的/网站可用)

upstream logstash { 
     server 127.0.0.1:9292; ##kibana 
     keepalive 100; 
} 

server { 
     listen 84; 
     listen [::]:84 ipv6only=on; 
     root /var/www/; 
     index index.html index.htm; 
     server_name logstash; 

     ##logging per server 
     access_log /var/log/nginx/logstash/access.log; 
     error_log /var/log/nginx/logstash/error.log; 

     location/{ 
       proxy_redirect off; 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Host $host; 
       proxy_pass http://logstash; 
     } 
} 
+0

第一所有你应该检查直接访问,例如尝试打开浏览器http://127.0.0.1:9292/(如果你使用本地机器),或curl -v http://127.0.0.1:9292/ – ig0r

+0

直接访问作品 - 但不是代理设置。 –

+0

我看到两个可能的问题。首先:看起来有些请求需要到9292(对于Kibana),其他的需要到9200(对于ES),但是你只需要把它们全部发送到9292.第二:我没有使用嵌入式Kibana但我知道独立安装程序需要更改'config.js'来将AJAX请求引导到除9200以外的端口,其中您的代理似乎只能在84上侦听。我对Apache有更多的经验,但[此示例设置](https://github.com/elasticsearch/kibana/blob/master/sample/nginx.conf)可能是方便的参考。 – rutter

回答

6

的问题似乎是

proxy_pass http://your-logstash-host; 

如果您在LogStash网页看日志,你会请参阅“警告 - :Rack :: Protection :: JsonCsrf阻止的攻击”

有一些内置安全性,我不熟悉,由机架保护提供防止跨源资源共享攻击。问题是来自Nginx的proxy_pass看起来像是CORS攻击来对ruby rack进行保护。

编辑:

如前所述,模块机架::保护:: CSRF是一个引发此警告。

我已经打开了代码,我们可以清楚地看到发生了什么事情:

def has_vector?(request, headers) 
    return false if request.xhr? 
    return false unless headers['Content-Type'].to_s.split(';', 2).first =~ /^\s*application\/json\s*$/ 
    origin(request.env).nil? and referrer(request.env) != request.host 
end 

因此,这里的才能通过请求,以便西纳特拉将接受他们所需要的nginx配置:

server { 
    listen  80; 
    server_name logstash.frontend.domain.org; 

    location/{ 
     # Proxying all requests from logstash.frontend to logstash.backend 
     proxy_pass http://logstash.backend.domain.org:9292; 
     proxy_set_header X-Real-IP $remote_addr; 

     # Set Referer and Host to prevent CSRF panick by Sinatra 
     proxy_set_header Referer my-host-04; 
     proxy_set_header Host my-host-04.domain.org; 

     # Alternatively to setting the Referer and Host, you could set X-Requested-With 
     #proxy_set_header X-Requested-With XMLHttpRequest; 
    } 
} 
+0

是的,我之前也看到过,但过了一段时间后才放弃了关注这个问题。一旦我解决问题,我会更新。 –

+0

按照描述工作 - merci! –