¿Cómo proxy / grafana con nginx?


15

He configurado e iniciado grafana predeterminado y funciona como se esperaba en http: // localhost: 3000 . Estoy tratando de proxy con nginx donde tengo instalado ssl. Estoy tratando de que responda a https: // localhost / grafana pero solo sirve lo siguiente:

{{alert.title}}

Tengo esto en mi bloque de servidor nginx:

location /grafana {
     proxy_pass         http://localhost:3000;
     proxy_set_header   Host $host;
}

Respuestas:


27

Parece que nginx admite la reescritura de las solicitudes en el servidor proxy, por lo que la actualización de la configuración hizo que funcionara:

location /grafana {
     proxy_pass         http://localhost:3000;
     rewrite  ^/grafana/(.*)  /$1 break;
     proxy_set_header   Host $host;
}

Mi grafana.ini también tiene una raíz actualizada:

[server]
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

Puedo confirmar que esto funciona. Tenga en cuenta que debido a los activos estáticos, tanto la reescritura de nginx como la configuración de root_url son necesarias, pero de lo contrario funciona con Grafana 2.2.
— Mahn

2
Además, si tiene una autenticación http básica frente a nginx antes de que llegue a grafana, asegúrese de anular el Authorizationencabezado al incluirlo proxy_set_header Authorization "";en su bloque de ubicación de proxy, de lo contrario Grafana insistirá en reutilizar estas credenciales para las conexiones de origen de datos.
— Mahn

La regla de reescritura es esencial para que funcione. Esto realmente debería agregarse a la documentación de Grafana
— desde el

@dasup No, no se requiere la regla de reescritura (al menos no en grafana 4.6). Debe configurar proxy_passpara incluir un URI como /, de lo contrario, la solicitud se pasa tal como está (consulte también nginx.com/resources/admin-guide/reverse-proxy para obtener la explicación). Entonces, la configuración debería ser proxy_pass http://localhost:3000/;exactamente lo que dicen los documentos de grafana.
— ChrisWue

10

Agregando a la respuesta @ AX-Labs, no necesita reescribir la URL.

nginx.conf

location /grafana/ {
     proxy_pass         http://localhost:3000/;
     proxy_set_header   Host $host;
}

grafana.ini update root:

[server]
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/

Observe el adicional / en el bloque de ubicación, que hace toda la diferencia.

Si desea ver el archivo completo, visite https://gist.github.com/mvadu/5fbb7f5676ce31f2b1e6 donde tengo la configuración de proxy de rever para Infludb y grafana.


1
Sí, la diferencia se explica aquí: nginx.com/resources/admin-guide/reverse-proxy
— ChrisWue

2
Tenga en cuenta que la barra diagonal http://localhost:3000/;también es importante.
— bitnik 05 de

Y en %(protocol)s://%(domain)s:%(http_port)s/grafana/- todas las ubicaciones deben tener una barra diagonal final.
— patricktokeeffe

3

Tengo el mismo problema cuando uso nginx y grafana en docker, en dos contenedores diferentes. Pasó las siguientes opciones para docker-compose en el servicio grafana, siguiendo http://docs.grafana.org/installation/behind_proxy/#nginx-configuration-with-sub-path :

- GF_SERVER_DOMAIN=foo.bar.com
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s:/grafana

Pero no funcionó, y muestra la consola de mi navegador: net::ERR_CONTENT_LENGTH_MISMATCH.

Entonces, para solucionarlo, agregué la siguiente línea a mi configuración nginx:

location /grafana/ {
  proxy_pass http://monitoring_grafana:3000/;
  proxy_max_temp_file_size 0; # THIS MADE THE TRICK!
}

0

FYI:

root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

provoca errores de proxy para algunas llamadas a la API. Encuentro:

root_url = %(protocol)s://%(domain)s:/grafana
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.