졍
지영이 블로그
졍
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • 네트워크 (12)
    • 시스템설계 (6)
    • AWS (7)
    • Elasticsearch (3)
    • Python (5)
    • 자료구조, 알고리즘 (9)
    • 코딩테스트 (29)
    • NCP (8)
    • 운영체제 (7)
    • 개인 프로젝트 (8)
    • Github (1)
    • 여행 (0)
      • 2024동유럽 (0)
    • 대학원 (0)
      • 논문정리 (0)

최근 글

최근 댓글

hELLO · Designed By 정상우.
졍

지영이 블로그

[Django] 상용 환경에서 staticfiles를 찾지 못하는 에러 해결
개인 프로젝트

[Django] 상용 환경에서 staticfiles를 찾지 못하는 에러 해결

2023. 8. 7. 20:31

https://jjung0326.tistory.com/101

 

[django] WEB 서버 '400 Bad Request Error' 해결

AWS에서 3 tier architecture을 구성하고 WEB서버에 접속하면 'Bad Request 400 에러'가 떨어지는 문제를 해결해보았다. 구성한 서버는 다음과 같다. WEB - Nginx IP: 3.39.165.45 WAS - Gunicorn IP: 3.37.209.223 1. 에러 확

jjung0326.tistory.com

WEB서버에서 400에러가 뜨는 문제는 해결했는데...

화면이 깨져 나오는걸 보니 staticfiles 경로를 찾고있지 못하고 있는 것 같다.

아마 설정파일 어딘가에서 꼬여있는 것 같다. 뭐가 문젠지 찾아보자.

 

1. Django settings.py

WEB 서버의 Django settings.py 코드를 먼저 살펴보자.

개발환경의 경우 STATIC_URL로 경로를 타고 들어와 STATICFILES_DIRS에 지정된 경로에서 staticfiles들을 찾는다.

예를 들면 http://<localhost>/static/dist/경로로 접속하면 Django 내부적으로 BASE_DIR / 'static/dist/'경로에서 staticfile들을 찾는것이다.

 

상용환경의 경우에는 STATIC_URL로 경로를 타고 들어오는건 동일한데, STATIC_ROOT에 지정된 경로에서 staticfiles들을 찾는다.

따라서 python manage.py collections 명령어로 staticfiles들을 다 묶어 해당 경로에 저장해둬야 웹에서 찾을 수 있다.

나는 미리 .static_root라는 폴더를 해당 경로에 생성해 둔 상태였다.

개발 환경- STATIC_URL & STATICFILES_DIRS
상용 환경 - STATIC_URL & STATIC_ROOT

2. /etc/nginx/sites-available/<애플리케이션>

nginx의 설정파일을 모아둔 sites-available에서 register_form 애플리케이션에 관한 설정파일은 다음과 같다.

server {
    listen 80;
    server_name 3.39.165.45;

    location / {
        include proxy_params;
        proxy_pass http://3.37.209.223:8000;

    }

	location /static/ {
		alias /home/ubuntu/register_form/.static_root;
	}
}

마지막 줄의 location /static/ 부분만 보면 된다.

현재 설정은 /static/경로로 들어오는 경우 /home/ubuntu/register_form/.static_root 폴더로 디렉팅 해주고 있다.

3. 해결

Django 설정의 STATIC_URL은 /static/dist/로 지정해주고 있다.

반면 Nginx에서의 설정은 /static/경로로 들어오는 경우 static파일들을 찾고 있다.

서로 입력 경로를 다르게 받고 있어서 문제가 생기고 있는 것이었다.

따라서 nginx.conf의 url을 /static/dist/로 바꾸던지, Django의 settings.py의 STATIC_URL을 /static/으로 바꾸어줘야 했다.

직관적으로 이해할 수 있도록 nignx.conf파일은 그대로 두고 Django의 settings.py의 STATIC_URL을 /static/으로 바꾸어주었다.

 

설정을 바꿔준 후 nginx를 재시작해주면 화면이 제대로 뜬다 !

'개인 프로젝트' 카테고리의 다른 글

[K8S] emptyDir 공유 볼륨 사용하기  (0) 2023.08.17
[IaC] VirtualBox + Vagrant로 CentOS 환경 구축하기  (0) 2023.08.09
[Django] WEB 서버 '400 Bad Request Error' 해결  (0) 2023.08.07
[SQLite] SQLite 특징  (0) 2023.05.05
<FORM> 태그 submit시 confirm 확인하기  (0) 2022.02.08
    졍
    졍

    티스토리툴바