![Nginx + Gunicorn + Django: nginx no permite archivos estáticos](https://rvso.com/image/617250/Nginx%20%2B%20Gunicorn%20%2B%20Django%3A%20nginx%20no%20permite%20archivos%20est%C3%A1ticos.png)
Código actualizado: esto todavía no funciona.
Configuración.py
STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
STATIC_URL = '/static/'
nginx conf :: /etc/nginx/sites-enabled/misitio
server {
server_name ec2-x-x-x-x.compute-1.amazonaws.com;
access_log /home/ubuntu/virtualenv/mysite/error/access.log;
error_log /home/ubuntu/virtualenv/mysite/error/error.log warn;
connection_pool_size 2048;
location /static/ {
#alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
#alias /static/;
root /home/ubuntu/virtualenv/mysite/homelaunch/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Host $server_name;
#proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
configuración de gunicorn -
command = '/usr/local/bin/gunicorn'
logfile = "/home/ubuntu/virtualenv/mysite/error/gunicorn.log"
loglevel = "info"
pythonpath = '/home/ubuntu/virtualenv/mysite'
bind = '127.0.0.1:8001'
ruta completa al directorio img y al directorio css:
/home/ubuntu/virtualenv/mysite/homelaunch/static/css
/home/ubuntu/virtualenv/mysite/homelaunch/static/img
Recibir un error en error.log:
001/favicon.ico", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
2013/09/02 16:57:42 [error] 2819#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: ec2-xx-xx-xx-xx.compute-1.amazonaws.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "ec2-xx-xx-xx-xx.compute-1.amazonaws.com"
¿Algo que esté notoriamente mal? Sigo recibiendo un error 404 en los archivos img y css cuando intento verlos a través de la fuente html generada.
Respuesta1
Esta respuesta ha sido editada para resumir las soluciones.
En la configuración de nginx
Reemplazo de:
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
con:
root /home/ubuntu/virtualenv/mysite/homelaunch/;
De acuerdo con ladocumentación: "Cuando la ubicación coincide con la última parte del valor de la directiva... es mejor usar la directiva raíz en su lugar"
Reemplazo de:
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
con:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
En la configuración de gunicorn
Reemplazo de:
bind = 'ec2-x-x-x-x.compute-1.amazonaws.com:8001'
con:
bind = '127.0.0.1:8001'
En la configuración de Django
Establecer STATIC_ROOT = '/home/ubuntu/virtualenv/mysite/homelaunch/static/'
cuál es la ruta absoluta correcta del sistema de archivos.
Configuración DEBUG = True
para tener información de error más detallada.
Respuesta2
Reemplace esto:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/;
}
Para este:
location /static/ {
alias /home/ubuntu/virtualenv/mysite/homelaunch/static/;
}
Si crea un alias, necesita colocar una ruta absoluta, porque ha definido un directorio estático en settings.py
STATIC_URL = '/static/'
Entonces, si pones un alias en este directorio /home/ubuntu/virtualenv/mysite/homelaunch/;
Nginx cree que los archivos estáticos están en /home/ubuntu/virtualenv/mysite/homelaunch/ y no en /home/ubuntu/virtualenv/mysite/homelaunch/static
Perdón por mi mal inglés, trato de mejorar :(
Espero que me entiendas.