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 |