2012-04-09 4 views
3

nginx 및 gunicorn과 함께 django를 사용하고 있습니다. nginx는 정적 컨텐츠를 제공해야하지만, css, images 및 js 파일은 브라우저에로드되지 않습니다. 왜 그런가요?django : nginx 정적 컨텐츠가 작동하지 않습니다.

내 Django 프로젝트 이름을 domain으로 대체했습니다.

/etc/nginx/sites-enabled/domain.tld

server { 
    listen 80; 
    server_name 127.0.0.1; 

    access_log /srv/domain/access.log; 
    error_log /srv/domain/error.log; 

    location /static { 
     alias /srv/domain/collected_static; 
    } 

    location/{ 
     proxy_pass http://127.0.0.1:8888; 
    } 
} 

user http; 
worker_processes 1; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 


events { 
    worker_connections 1024; 
} 


http { 
    include  mime.types; 
    default_type application/octet-stream; 

#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
#     '$status $body_bytes_sent "$http_referer" ' 
#     '"$http_user_agent" "$http_x_forwarded_for"'; 

#access_log logs/access.log main; 

sendfile  on; 
#tcp_nopush  on; 

#keepalive_timeout 0; 
keepalive_timeout 65; 

#gzip on; 

server { 
    listen  80; 
    server_name localhost; 

    #charset koi8-r; 

    #access_log logs/host.access.log main; 

    location/{ 
     root html; 
     index index.html index.htm; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root html; 
    } 

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
    # 
    #location ~ \.php$ { 
    # proxy_pass http://127.0.0.1; 
    #} 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    #location ~ \.php$ { 
    # root   html; 
    # fastcgi_pass 127.0.0.1:9000; 
    # fastcgi_index index.php; 
    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 
    # include  fastcgi_params; 
    #} 

    # deny access to .htaccess files, if Apache's document root 
    # concurs with nginx's one 
    # 
    #location ~ /\.ht { 
    # deny all; 
    #} 
} 


# another virtual host using mix of IP-, name-, and port-based configuration 
# 
#server { 
# listen  8000; 
# listen  somename:8080; 
# server_name somename alias another.alias; 

# location/{ 
#  root html; 
#  index index.html index.htm; 
# } 
#} 


# HTTPS server 
# 
#server { 
# listen  443; 
# server_name localhost; 

# ssl     on; 
# ssl_certificate  cert.pem; 
# ssl_certificate_key cert.key; 

# ssl_session_timeout 5m; 

# ssl_protocols SSLv2 SSLv3 TLSv1; 
# ssl_ciphers HIGH:!aNULL:!MD5; 
# ssl_prefer_server_ciphers on; 

# location/{ 
#  root html; 
#  index index.html index.htm; 
# } 
#} 
include /etc/nginx/sites-enabled/*; 

} 

gunicorn.conf /etc/nginx/conf/nginx.conf. 파이

bind = "127.0.0.1:8888" 
logfile = "/srv/domain/gunicorn.log" 
loglevel = "info" 
workers = 3 
장고에서

발췌

DEPLOY_PATH = os.path.dirname(os.path.realpath(__file__)) 

STATIC_ROOT = os.path.join(DEPLOY_PATH, 'collected_static') 

STATIC_URL = '/static/' 

설정 편집 : 기계에서 출력 (링크 페이스트 빈합니다) :

ps aux | grep nginx

ls -l *.log

+0

collected_static에서 accuall 파일이 있습니다 확인하는 경우 . 어쩌면 django-admin.py collectstatic을 실행하는 것을 잊었을 것입니다. –

+0

collected_static /에 파일이 있습니다. –

+0

@dexterify : OK. 예상 URL로 액세스 할 수 있습니까? html로 올바른 URL이 보이나요? [static files howto] (http://docs.djangoproject.com/ko/1.4/howto/static-files/)를 읽고이 기사의 기본 부분을 읽었는지 확인하십시오. – hynekcer

답변

2

귀하의 구성이 올바른지 보인다. 파일이 실제로 수집되는 한 Django 및 Gunicorn 구성은 정적 파일 제공과 아무 관련이 없습니다. 다음 가능성이 내 마음에 와서 : 파일이 아직 collected_static 디렉토리에 수집되지 않습니다

  • (./manage.py collectstatic)
  • Nginx에이 파일에는 읽기 권한이 없습니다 당신은 문제가있는 기존의 nginx 버전을 사용
  • 현재 구성으로 현재 1.x 버전을 사용해야합니다. 데비안을 사용하고 있다면 nginx.org의 Deb 저장소를 사용하십시오.

권한이 문제가 아닌 경우 요청이 실제로 Nginx에 도달하는지 확인하려면 nginx 액세스 파일을 확인하십시오. 그런 다음 nginx 오류 로그를 검사하여 오류가 기록되었는지 확인하십시오. (!) 참고 (그러나 비 관련), 내가 예를 들어, 당신의 / 위치 설정에 일부 프록시 헤더를 넣고 별도의 섹션으로 응용 프로그램 서버 구성을 이동하는 것이 좋습니다으로

:

upstream app_server { 
    server localhost:8888 fail_timeout=0; 
} 


server { 
    ... 
    location/{ 
     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; 
     break; 
    } 
} 
관련 문제