python - setup - nginx 502 django
django-gunicorn-nginx: 502 gateway malo (3)
Estoy intentando enviar mi aplicación web al servidor y esta es la primera vez que configuro el servidor. Estoy usando la configuración de django-gunicorn-nginx siguiendo este tutorial http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/ Primero todo fue perfecto y obtuve la página de bienvenida de django . Luego cargué las aplicaciones en el proyecto django y configuré la raíz estática y ahora obtengo la pasarela 502 incorrecta. Puedes verla en http://qlimp.com
Todo hasta la configuración de gunicornio y supervisor es el mismo que se muestra en ese tutorial. Pero modifiqué algunos nginx conf. 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 guiarme?
ACTUALIZAR
Errors.log https://gist.github.com/2768425
¡Gracias!
Primero. No utilizar if
en un nginx conf. Es malo. Como realmente, realmente horrible. Use 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 gunicornio están arrancando porque hay un error fatal. Intenta apagar Gunicorn. Si estás usando el supervisor:
sudo supervisorctl stop [gunicorn process name]
Luego, desde la ejecución raíz de su proyecto:
python manage.py run_gunicorn -c path/to/gunicorn.conf
Tenga en cuenta cualquier error de inicio o si realmente se inicia, pruebe su sitio en el navegador. Si aún no obtiene ninguna información significativa intente simplemente ejecutar el servidor de ejecución estándar
python manage.py runserver
Una vez más, tenga en cuenta los errores 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 darle algo con qué trabajar.
ACTUALIZAR
El error que recibes 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 -b
o --bind
. Como solo usaste uno -
está interpretando el IP como ind=127.0.0.1
, que obviamente no es correcto. Necesitas usar:
gunicorn_django --bind=127.0.0.1:8001
O
gunicorn_django -b 127.0.0.1:8001
Aumenta el keepalive_timeout.
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;
}
}
Debe comprender 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 si no lo hace, pruebe el comando "python manage.py runserver" para asegurarse de que su sitio se ejecute sin errores porque en el caso de que el sitio no pueda presentar datos en wsgi.py que es probable que muestre el mismo error.