¿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;
}
Laboratorios AX
fuente

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
Laboratorios AX
fuente
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.

Adarsha
fuente
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!
}
boris quiroz
fuente
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
JasonfromDR
fuente