es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo resolver problemas de DNS con Elastic Beanstalk y Nginx?

Estoy tratando de poner en marcha un servidor Flask muy básico con Docker en Elastic Beanstalk. Cuando navego al dominio asociado con el entorno de EB, todo lo que veo es un gran y gordo Error 502 Bad Gateway.

Profundizando un poco, veo el siguiente error en los registros de Nginx en EB:

2021/12/26 01:00:24 

16944#16944: *682 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.23.137, server: , request: "GET / HTTP/1.1", upstream: "http://172.17.0.2:5000/", host: "172.31.1.207"

En el archivo eb-stdouterr.log, se informa que el servidor está en funcionamiento:

web_1  |  * Sirviendo la aplicación Flask 'app' (carga perezosa)
web_1  |  * Entorno: producción
web_1  |    ADVERTENCIA: Este es un servidor de desarrollo. No lo utilices en un entorno de producción.
web_1  |    Utiliza en su lugar un servidor WSGI de producción.
web_1  |  * Modo de depuración: activado
web_1  |  * Ejecutándose en todas las direcciones.
web_1  |    ADVERTENCIA: Este es un servidor de desarrollo. No lo utilices en un entorno de producción.
web_1  |  * Ejecutándose en http://172.24.0.2:5000/ (Presiona CTRL+C para salir)

Encontré la dirección IP pública asociada a la instancia EC2, y en realidad pude hacer una consulta usando curl con los resultados esperados, por lo que parece que este es un problema de DNS. ¿Alguna sugerencia o consejo? Realmente no tengo idea de cómo seguir depurando.

Configuración:
– AWS Linux 2
– Imagen de Docker Python 3.9-buster
– Servidor Flask

Editar: Según esta documentación de AWS, parece que al usar docker-compose no deberías usar Nginx. Fui y lo deshabilité, pero todavía tengo el problema de Error 502 Bad Gateway y no hay registros de error relevantes.

Aquí está mi Dockerfile:

syntax=docker/dockerfile:1

FROM python:3.9-buster
COPY . /code
WORKDIR /code
COPY requirements.txt requirements.txt
RUN apt-get update -y && \
    apt-get install -y python-pip python-dev && \
    pip install --upgrade pip && \
    pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD python app.py

Y aquí está mi docker-compose.yml:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code

Por favor ayuda, gracias de antemano 😀

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es causado por Nginx no siendo capaz de conectarse al servidor upstream. Podrías intentar hacer lo siguiente para depurar más:

    • Verifica que el servidor Flask en realidad esté escuchando en el puerto correcto (5000). Puedes verificar esto ejecutando docker-compose ps y comprobando la IP:puerto del contenedor.
    • Asegúrate de que el grupo de seguridad asociado al entorno de Elastic Beanstalk esté correctamente configurado para permitir el tráfico en el puerto 5000. Puedes verificar las reglas de entrada del grupo de seguridad para la(s) instancia(s) asociada(s) al entorno.
    • Verifica que la configuración DNS de tu entorno sea correcta. Podrías intentar usar la dirección IP asociada a la instancia en lugar del nombre de dominio para descartar esto.
    • Revisa los registros del servidor Flask para ver si hay algún error reportado. También puedes habilitar el registro de depuración para obtener más detalles.
    • Intenta conectarte directamente al servidor Flask desde tu máquina local usando curl o un navegador web. Esto podría ayudar a descartar problemas con el propio servidor Flask.

    Con respecto a la edición en la pregunta, es cierto que al usar docker-compose significa que no se requiere Nginx, ya que el servicio se puede acceder directamente a través de la IP:puerto del contenedor. Sin embargo, si deseas utilizar Nginx, debes asegurarte de que esté configurado correctamente para redireccionar las solicitudes al servidor upstream correcto.

Comments are closed.