2013-12-13 17 views
5

Sto provando a inoltrare richieste da nginx a kibana (logstash). Posso accedere al dashboard di kibana sulla porta 9292 - Posso confermare che un servizio è in ascolto sulla porta 9292. Posso eseguire correttamente il proxy da nginx ad altri servizi ma la direttiva proxy per kibana (porta 9292) non funziona - Posso eseguire il proxy su 9200 per elasticsearch. Qualche idea su come risolvere ulteriormente questo sarebbe apprezzato.impossibile eseguire il proxy da nginx a kibana

Aggiornamento: Ho provato a cambiare la configurazione del server in upstream per puntare a 0.0.0.0 come pure l'indirizzo del server, ma nessuna delle due opzioni funziona. La richiesta viene instradata al server predefinito.

Un altro aggiornamento: Ho notato che la rimozione dei parametri del proxy dal file predefinito nginx mi permette di inoltrare la richiesta al Kibana listneing porto - tuttavia, Kibana si lamenta che mancano "cruscotti/default.json", che ho sto indovinando è dovuto ad alcune impostazioni mancanti o mal configurate in nginx.

di default (/ etc/nginx/sites-available)

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

primo di tutto quello che dovresti controllare l'accesso diretto, ad esempio prova ad aprire con il browser http://127.0.0.1:9292/ (se usi la macchina locale), o arricciare -v http://127.0.1.19292/ – ig0r

+0

accesso diretto funziona - ma non l'installazione del proxy. –

+0

Vedo due possibili problemi. Primo: sembra che alcune richieste debbano andare a 9292 (per Kibana) e altre devono andare a 9200 (per ES), ma le invii tutte a 9292. Secondo: Non ho usato il Kibana incorporato setup, ma so che una configurazione standalone richiedeva una modifica in 'config.js' per indirizzare le richieste AJAX a una porta diversa da 9200, dove il tuo proxy sembra essere in ascolto solo sull'84. Ho più esperienza con Apache, ma [questo esempio di configurazione] (https://github.com/elasticsearch/kibana/blob/master/sample/nginx.conf) potrebbe essere utile riferimento. – rutter

risposta

6

Il problema sembra essere

proxy_pass http://your-logstash-host; 

Se si guardano i log del Web LogStash, ti vedi "WARN -: attacco impedito da Rack :: Protection :: JsonCsrf"

C'è una certa sicurezza integrata, che non mi è familiare, fornita dalla protezione del rack per prevenire attacchi di condivisione di risorse di origine incrociata. Il problema è che il proxy_pass di Nginx sembra un attacco CORS alla protezione del rack rubino.

EDIT:

Come detto in precedenza, il modulo rack :: Protezione :: CSRF è quella gettando questo avvertimento.

ho aperto il codice e possiamo vedere chiaramente cosa sta succedendo:

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 

Quindi, ecco la richiesta nginx config richiesto per superare le richieste in modo che Sinatra li accetterà:

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

Sì. L'ho visto anche in precedenza, ma ho perso tempo a esaminare il problema. Aggiornerò SO una volta risolto il problema. –

+0

funziona come descritto - merci! –