
Estoy intentando configurar uninstancia de búsqueda de aplicaciones acoplables autoadministrada, junto con kibana y elasticsearch, consultado por una aplicación uvicorn python, proxy por un servidor web nginx
Mi problema actual es que los registros de búsqueda de aplicaciones muestran el agente de usuario predeterminado de Python y la IP en los registros de búsqueda de aplicaciones (es decir, python-requests/2.22.0 y una IP de LAN).
Me gustaría reenviar los encabezados personalizados de nginx que contienen la IP correcta y el agente de usuario del cliente remoto a los registros de búsqueda de aplicaciones que se pueden consultar tan fácilmente en kibana.
Me di cuenta de que existe un output.elasticsearch.headers
encabezado que se puede configurar en el entorno o filebeat.yml.
¿Tienen alguna idea sobre esto?
Gracias.
Respuesta1
Bueno, finalmente lo he logrado.
No fue necesario ni suficiente usar yml o variables de entorno ya que la IP real del cliente y el agente de usuario no eran estáticos.
Primero cambié el proxy nginx.conf a esto:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-User-Agent $http_user_agent;
Luego, en cada método FastAPI de uvicorn agregué un primer request
parámetro:
from fastapi import FastAPI
app = FastAPI()
# ...
@app.get("/search")
async def search_endpoint(request: Request):
# ... method implementation
Search_endpoint llama a mi clase de búsqueda que a su vez utiliza el cliente Python de appsearch:
import elastic_app_search
# ...
client = elastic_app_search.Client(api_key = XXX, base_endpoint = YYY, use_https=False)
Y luego en el cliente actualizo los encabezados:
x_headers = {
'Connection': 'close',
'X-Forwarded-For': request.headers['X-Forwarded-For'],
'X-User-Agent': request.headers['X-User-Agent']
}
client.session.session.headers.update(x_headers)
# For current appsearch python client the repeated name was necessary
Luego, los registros de la aplicación comenzaron a registrar los encabezados X personalizados =)