본문 바로가기
python

[python-django] static, media 경로 지정(ngnix) 404 error

by 하이바네 2022. 11. 1.
반응형

Django에서 Debug = False로 바꿨는데 이미지가 뜨지 않고 링크로 들어가면 아래와 같이 뜬다고 너무 당황하지 말자. 

 

잘 찾아왔고 방법은 너무 간단하다(이미 알고 있는 것일수도 있다)

시작하기 전에 혹시 settings.py에 아직 media를 세팅하지 않은 사람은 참고 바란다.

 

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

 

문제의 발생 시점

 

django에서 개발 환경 (Debug = True)인 상태로 개발을 하다가 테스트 서버에 배포를 했는데 media에 있는 이미지를 읽어오지 못한 문제가 생겼었다. 처음에는 서버의 설정상의 문제이거나 다른 문제들이라 생각했지만 알고보니 nginx의 설정 문제였다.

 

django에서 기본적으로 img, css, js파일들을 불러오는 경로에 대해서는 웹서버에 설정을 해줘야한다. 

runserver로 돌릴 경우에는 urls.py에 url설정을 더해줘야 한다.

 

먼저 Debug = True인 상태로 돌릴 경우 urls.py에 필요한 값을 살펴보면 다음과 같다.

if settings.DEBUG:
	urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

 

그리고 Debug = False인 경우 nginx의 설정에 다음과 같이 세팅되어야 한다.

기본적인 세팅에 대한것은 점프 투 장고를 참고해서 진행 했으며, 아래의 링크를 통해 Gunicorn부터 살펴보면 된다.

 

https://wikidocs.net/76904

 

4-10 Gunicorn

이전 장에서 웹 서버에서 파이썬 장고 애플리케이션을 호출하려면 WSGI 서버가 필요하다고 했다. 이번 장에서는 파이보에서 사용할 WSGI 서버인 Gunicorn을 설치하고 사용해…

wikidocs.net

server {                                                                                                                          │ubuntu@ip-172-26-2-106:~/projects/tempria/config/settings$
                                                                                                                                  │
        listen 80;                                                                                                                │
                                                                                                                                  │
        server_name x.xxx.xxx.xxx;                                                                                                 │
                                                                                                                                  │
        location = /favicon.ico { access_log off; log_not_found off; }                                                            │
                                                                                                                                  │
                                                                                                                                  │
        location /static {                                                                                                        │
                                                                                                                                  │
                alias /home/ubuntu/projects/tempria/static;                                                                       │
                                                                                                                                  │
        }                                                                                                                         │
        location /media {                                                                                                         │
                alias /home/ubuntu/projects/tempria/media;                                                                        │
                autoindex on;                                                                                                     │
        }                                                                                                                         │
                                                                                                                                  │
        location / {                                                                                                              │
                                                                                                                                  │
                include proxy_params;                                                                                             │
                                                                                                                                  │
                proxy_pass http://unix:/tmp/gunicorn.sock;                                                                        │
                                                                                                                                  │
        }
}

 

추가 삽질

 

그리고 추가적으로 삽질했던 부분인데 서버의 언어를 건드리다가, 업로드 파일명이 다음과 같이 변하는 현상도 겪었으니 참고 바란다. 이 경우에는 언어 사용 설정 했던거를 원복 하자...

 

위의 삽질의 원인은 aws lightsail을 사용중인데 웹에서 ssh로 바로 접속했을 경우 한글이 깨져 보였던 것이었다. 혹시라도 ssh접속을 putty같은 프로그램으로 해보지 않은 사람은 먼저 해보길 바란다.

 

이놈의 원인..

lightsail 한글깨짐

참고로 lightsail이 제공하는 웹ssh에서 한글 깨지는 방법을 해결하는 방법은 아직 못찾았다.

 

아시는분 댓글 부탁 드립니다.

728x90

댓글