2017-08-26 3 views
1

führt Wir haben eine dockerisierte Architektur. Der einzige und wichtigste Einstiegspunkt ist unser Nginx. Das macht die Verbindung zwischen all unseren Dienstleistungen.Nginx Speicherort/Protokolle werden nicht korrekt an Kibana übergeben, was zu 404

Erreichen der Domain-Name mit Standort / funktioniert gut. Unsere Angular Frontend App wird korrekt angezeigt.

Das Hauptproblem ist der Zugriff auf KIBANA (v5.5) unter /logs.

Zum Beispiel versucht zu erreichen https://dev.example.com/logs/ der Browser zeigt eine 404 aufgrund der Tatsache, dass es versucht, https://dev.example.com/login?next=%2Flogs zu erreichen.

Es scheint, Kibana, wie in unserem Standort Endpunkt Proxy, versucht, url mit einer Basis-URL von / umzuschreiben. Anstatt den URI nach/logs/location neu zu schreiben.

So verbessern Sie unsere Konfiguration: - Erreichbarkeit von/logs/zulassen, die unsere Kibana App korrekt anzeigen?

Hier ist unsere nginx-Konfiguration. Bitte beachten Sie, Client, Backend, Kibana bezieht sich auf Docker Hostnamen.

server { 
    listen 443; 
    ssl  on; 
    rdns on; 

    ssl_certificate /etc/ssl/production/certs/example/fullchain.pem; 
    ssl_certificate_key /etc/ssl/production/certs/example/privkey.pem; 

    server_name dev.example.com; 

    # Angular APP 
    location/{ 
     proxy_pass http://client; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 

    # Backend proxy 
    location /api { 
     proxy_pass http://backend:9090; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 

    # Logs on Kibana 
    location /logs { 
     proxy_pass http://kibana:5601; 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 
} 

Ergebnisse ROTATION Anfrage:

curl -v https://dev.example.com/logs/ 
* About to connect() to dev.example.com port 443 (#0) 
* Trying xx.xx.xx.xx... 
* connected 
* Connected to dev.example.com (xx.xx.xx.xx) port 443 (#0) 
* SSLv3, TLS handshake, Client hello (1): 
* SSLv3, TLS handshake, Server hello (2): 
* SSLv3, TLS handshake, CERT (11): 
* SSLv3, TLS handshake, Server key exchange (12): 
* SSLv3, TLS handshake, Server finished (14): 
* SSLv3, TLS handshake, Client key exchange (16): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSLv3, TLS change cipher, Client hello (1): 
* SSLv3, TLS handshake, Finished (20): 
* SSL connection using ECDHE-RSA-AES256-GCM-SHA384 
* Server certificate: 
*  subject: CN=example.com 
*  start date: 2017-08-23 17:26:00 GMT 
*  expire date: 2017-11-21 17:26:00 GMT 
*  subjectAltName: dev.example.com matched 
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3 
*  SSL certificate verify ok. 
> GET /logs HTTP/1.1 
> User-Agent: curl/7.28.1 
> Host: dev.example.com 
> Accept: */* 
> 
< HTTP/1.1 404 Not Found 
< Server: nginx/1.13.1 
< Date: Sat, 26 Aug 2017 15:39:43 GMT 
< Content-Type: text/html 
< Content-Length: 169 
< Connection: keep-alive 
< 
<html> 
<head><title>404 Not Found</title></head> 
<body bgcolor="white"> 
<center><h1>404 Not Found</h1></center> 
<hr><center>nginx/1.13.1</center> 
</body> 
</html> 
* Connection #0 to host dev.example.com left intact 
* Closing connection #0 
* SSLv3, TLS alert, Client hello (1): 

Vielen Dank für Ihre Hilfe auf diesem.

+0

auf welchem ​​Port der Client-Anwendung läuft auf? –

+0

Es läuft auf '80' – BlackHoleGalaxy

+0

'/logs' sollte nach kibana gehen, auch wenn es ausgeht. Etwas stimmt hier nicht. Kannst du die Ergebnisse von 'curl -v http: // nginxip/logs' zu deiner Frage hinzufügen, so kann man sehen, was passiert. Auch nginx Containerprotokolle zu gehen, wäre am besten –

Antwort

1

Sie müssen die server.basePath auf /logs setzen, indem Sie die Umgebungsvariable SERVER_BASEPATH an den Kibana-Container übergeben.

Dann müssen Sie den/logs Präfix in nginx abzustreifen eine Rewrite im proxied Standort mit:

location /logs { 
    rewrite ^/logs(/.*)$ $1 break; 
    proxy_pass http://kibana:5601; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

Plus, es ist offenbar ein Fehler in Kibana, und die obige Konfiguration funktioniert nur, wenn wir erreichen Kibana mit der folgenden uRL:

http://nginxip/logs/ 

aber nicht, wenn wir haben einen abschließenden Schrägstrich nicht, wie:

http://nginxip/logs 

Um dies zu lösen, müssen wir ein weiteres Neuschreiben in nginx hinzufügen, um sicherzustellen, dass immer ein End-Schrägstrich vorhanden ist. Fügen Sie den folgenden außerhalb der/logs Ort:

rewrite ^/logs$ /logs/; 

Quelle: https://www.elastic.co/guide/en/kibana/current/settings.html

+0

Danke für Ihre Hilfe. Hier ist, wo ich endete: 'location/logs/{ \t \t umschreiben ^/logs (/.*) $ $ 1 zuletzt; \t \t proxy_pass http: // kibana: 5601; \t \t proxy_set_header Host $ host; \t \t proxy_set_header X-Real-IP $ remote_addr; \t \t proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for; \t \t proxy_set_header X-Forwarded-Proto $ -Schema; \t} 'erreichen/logs/mich auf den Client fallen lassen (erreicht durch /) – BlackHoleGalaxy

+0

Ok Ich habe versucht das ganze Setup auf meinem Rechner und meine Antwort angepasst. Hoffe, es funktioniert auch für Sie – whites11

+0

Danke mit Pause statt Finale es funktioniert! Danke für Ihre Hilfe. – BlackHoleGalaxy