2017-08-26 3 views
1

Nous avons une architecture dockerisée. Le seul et principal point d'entrée est notre nginx. Ce qui fait le lien entre tous nos services.Nginx location/logs ne passe pas correctement le proxy à Kibana menant à 404

Atteindre le nom de domaine avec l'emplacement / fonctionne très bien. Notre application frontale Angular s'affiche correctement.

Le problème principal est d'accéder à KIBANA (v5.5) au /logs.

Par exemple en essayant d'atteindre https://dev.example.com/logs/ le navigateur affiche un 404 en raison du fait qu'il essaie d'atteindre https://dev.example.com/login?next=%2Flogs.

Il semble que Kibana, comme indiqué dans notre point de terminaison Location, tente de réécrire l'URL avec une URL de base de /. Au lieu de réécrire l'URI ajouté après/logs/location.

Comment améliorer notre configuration pour: - Permet d'atteindre/logs/qui affiche correctement notre application Kibana?

Voici notre configuration nginx. S'il vous plaît noter client, backend, kibana se réfère aux noms d'hôtes docker.

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; 
    } 
} 

Résultats de demande CURL:

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): 

Merci pour votre aide à ce sujet.

+0

Sur quel port votre application client fonctionnant sur? –

+0

Il fonctionne sur '80' – BlackHoleGalaxy

+0

'/logs' devrait aller à kibana, même si elle a des erreurs. Quelque chose ne va pas ici. Pouvez-vous ajouter les résultats de 'curl -v http: // nginxip/logs' à votre question, afin que l'on puisse voir ce qui se passe. En outre, les journaux de conteneurs nginx pour aller avec ce serait le meilleur –

Répondre

1

Vous devez définir server.basePath sur /logs en transmettant la variable d'environnement SERVER_BASEPATH au conteneur kibana.

, vous devez ensuite dépouiller le préfixe/logs dans nginx en utilisant une ré-écriture à l'emplacement approximé:

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; 
} 

De plus, il y a apparemment un bogue dans Kibana et la configuration ci-dessus ne fonctionne que si nous atteignons Kibana à l'adresse suivante:

http://nginxip/logs/ 

mais pas si on n'a pas une barre oblique de fin, tels que:

http://nginxip/logs 

Pour résoudre ce problème, nous devons ajouter une autre réécriture dans nginx pour nous assurer qu'il y a toujours une barre oblique finale. Ajouter l'extérieur de l'emplacement suivant/logs:

rewrite ^/logs$ /logs/; 

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

+0

Merci pour votre aide. Voici où j'ai terminé: 'location/logs/{ \t \t réécrire ^/logs (/.*) $ 1 $ dernier; \t \t proxy_pass http: // kibana: 5601; \t \t proxy_set_header Hôte $ host; \t \t proxy_set_header X-Real-IP $ remote_addr; \t \t proxy_set_header X-Forwarded-Pour $ proxy_add_x_forwarded_for; \t \t proxy_set_header Système X-Forwarded-Proto $; \t} 'mais atteindre/logs/me faire tomber sur le client (atteint par /) – BlackHoleGalaxy

+0

Ok, j'ai essayé l'ensemble de l'installation sur ma machine et ajusté ma réponse. Espérons que cela fonctionne pour vous, aussi – whites11

+0

Merci à la rupture au lieu de final cela fonctionne! Merci de votre aide. – BlackHoleGalaxy