django-gunicorn-nginx: 502 mala puerta de enlace

Estoy tratando de enviar mi aplicación web al servidor y esta es la primera vez que configuro el servidor. Estoy usando django-gunicorn-nginx configuración siguiendo este tutorial http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/ Primero todo fue perfecto y obtuve el página de bienvenida de django. Luego cargué las aplicaciones en el proyecto django y configuré la raíz estática y ahora estoy obteniendo 502 Puerta de enlace no válida Puedes hacer el check-out en http://qlimp.com

Todo hasta la configuración del gunicornio y el supervisor es el mismo que se muestra en ese tutorial. Pero modifiqué algunas configuraciones de nginx. Aquí está:

upstream app_server_djangoapp {
    server localhost:8001 fail_timeout=0;
}

server {
    listen 80;
    server_name qlimp.com;

    access_log  /var/log/nginx/guni-access.log;
    error_log  /var/log/nginx/guni-error.log info;

    keepalive_timeout 5;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://app_server_djangoapp;
            break;
        }
    }
    location /files/ {
        autoindex on;
        root /home/nirmal/qlimp/qlimp/files/;
    }
}

Aquí está mi URL de medios:

MEDIA_URL = '/files/'

Archivos es la carpeta donde tengo todos los archivos estáticos. ¿Cómo puedo hacer que mi proyecto funcione en el servidor? ¿Alguien podría orientarme?

ACTUALIZACIÓN

Errores.log https://gist.github.com/2768425

¡Gracias!

preguntado el 22 de mayo de 12 a las 11:05

502 básicamente significa que nginx no se puede conectar al servidor superior. -

@vartec ¿Por qué es así? ¿He cometido algún error en la configuración de conf? -

@mk: no tengo idea de por qué, tienes que depurarlo tú mismo. Mira tus registros. Prueba a ver si localhost: 8001 funciona localmente, etc. -

¿depurar? me podrias decir los pasos? -

4 Respuestas

Primero. no usar if en una conferencia de nginx. Es malo. Como realmente, realmente horrible. Utilice lo siguiente en su lugar:

location / {
    try_files $uri @proxy;
}

location @proxy {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server_djangoapp;
}

Ver: http://wiki.nginx.org/IfIsEvil y http://wiki.nginx.org/Pitfalls

Ahora, en lo que respecta a la depuración. Tus trabajadores de gunicorn están arrancando porque hay un error fatal. Intenta apagar gunicorn. Si está utilizando supervisor:

sudo supervisorctl stop [gunicorn process name]

Luego, desde la raíz de su proyecto, ejecute:

python manage.py run_gunicorn -c path/to/gunicorn.conf

Tenga en cuenta cualquier error de inicio o, si realmente arranca, pruebe su sitio en el navegador. Si aún no obtiene información significativa, intente simplemente ejecutar el servidor de ejecución estándar

python manage.py runserver

Nuevamente, tenga en cuenta cualquier error y, si se carga bien, pruebe su sitio en el navegador. Sugiero probar en localhost:8000 como lo haría en desarrollo. Uno de estos debería darte algo trabajar con.

ACTUALIZACIÓN

El error que recibe dice que no se puede conectar a "ind=127.0.0.1". Luego, mirando el comando que está ejecutando, gunicorn_django -bind=127.0.0.1:8001, es fácil ver el problema. Puede especificar la IP y el puerto para enlazar con cualquiera -b or --bind. Ya que solo usaste uno - está interpretando la IP como ind=127.0.0.1, lo que obviamente no es correcto. Necesitas usar:

gunicorn_django --bind=127.0.0.1:8001

Or

gunicorn_django -b 127.0.0.1:8001

contestado el 22 de mayo de 12 a las 17:05

He hecho modificaciones como lo que dijiste. Luego ejecuto este comando: sudo supervisorctl stop qlimp. Muestra unix:///var/run/supervisor.sock no such file - rnk

Cuando ejecuto esto python manage.py runserver No muestra nada pero cuando corro gunicorn_django -bind=127.0.0.1:8001 Muestra gist.github.com/2769983 - rnk

Y para este código python manage.py run_gunicorn -c path/to/gunicorn.conf muestra Unknown command: 'run_gunicorn' - rnk

run_gunicorn solo funciona si agregaste gunicorn a INSTALLED_APPS. Sin embargo, creo que veo tu problema. Ver actualización. - Chris Pratt

Sí. Ahora hice los cambios. Entonces python manage.py run_gunicorn -c path/to/gunicorn.conf Muestra gist.github.com/2770230 Pero instalé la biblioteca de imágenes de Python y mostraba el mismo error una y otra vez: rnk

Necesita entender las directivas correctamente. La directiva "server_name" contiene la dirección IP y "proxy_pass" se conectará al puerto donde está alojado su servidor. En tu caso:

server_name 127.0.0.1;
proxy_pass http://127.0.0.1:8001;

No hay ninguna razón para que esto no funcione, pero aún así, si no funciona, intente con el comando "python manage.py runserver" para asegurarse de que su sitio se ejecute sin errores porque en caso de que el sitio no pueda presentar datos a wsgi.py eso probable que muestre el mismo error.

respondido 20 mar '16, 14:03

Aumente el tiempo de espera de keepalive_time.

server {
        listen 5000 default deferred;
        client_max_body_size 4G;
        keepalive_timeout 5;
        server_name _;
        location / {
            proxy_read_timeout 800;
            proxy_pass  http://localhost:9000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            break;
        }
}

Respondido 04 Oct 15, 04:10

Intente usar un clase obrera como gevent. Tuve algunos problemas para usar gevent en python 3.7, mejor usar python 3.6.

Ejemplo de Django, Python 3.6:

pip install gevent
gunicorn my_app.wsgi --workers 2 --worker-class=gevent --bind 0.0.0.0:80 --timeout=90 --graceful-timeout=10

Respondido 10 ago 18, 17:08

gevent estuvo un poco atrasado en el soporte para python 3.7 por un tiempo; la versión estable alcanzó a python 3.7 y 3.8 en gevent 1.5.0. - brad koch

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.