AWS에서 3 tier architecture을 구성하고 WEB서버에 접속하면 'Bad Request 400 에러'가 떨어지는 문제를 해결해보았다.
구성한 서버는 다음과 같다.
WEB - Nginx
IP: 3.39.165.45
WAS - Gunicorn
IP: 3.37.209.223
1. 에러 확인
vi /var/log/nginx/error.log 명령어로 어디서 에러가 나고있는지 확인할 수 있다.
에러내용을 보면 ~/register_form/.static_root 폴더와 ~/register_form/.static_root/css 폴더가 forbidden 되어있다.
그리고 was 서버로 connection이 refused 되어 연결이 계속 failed되는 상태이다.
2. 포트 확인
WEB서버와 WAS서버에 각각 접속해 네트워크 상태를 확인해보았다.
netstat의 -nltp 옵션으로 현재 tcp 프로토콜에 대해서 LISTEN 상태인 포트를 확인해보았다
WEB
WAS
WEB의 80포트와 WAS의 8000포트가 제대로 열려있는 것을 확인할 수 있다.
3. 연결 확인
WEB 서버에서 traceroute 명령어로 WAS 서버의 8000포트가 연결되어있는지 확인해보았다.
중간에 경로를 알 수 없는 * * *이 뜨긴 하지만, 최종적으로 WAS서버의 8000 포트까지 도달하는걸 볼 수 있다.
+) ping과 traceroute의 차이점
일반적으로 서버간 연결을 확인할 때는 ping이나 traceroute를 사용하는 것 같다.
이 둘의 차이에 대해서 간단히 알아보면 다음과 같다.
Ping
ping test는 서버에 연결할 수 있는지 여부와 데이터를 전송 및 수신하는데 걸리는 시간을 알 수 있다.
하지만 ping 테스트는 특정 포트에 대한 연결을 확인할 수 없다.
Traceroute
반면 traceroute는 정확한 경로 정보(홉 수), 라우터별, 홉 별 걸린 시간을 설명해 준다.
또한 -p 옵션을 통해 특정 포트에 대한 연결도 확인할 수 있다.
4. 해결방법
각 서버의 포트도 잘 열려있고, 네트워크 연결도 문제가 없는 것 같았다.
뭐가 문제인지 계속 검색하다가....... Django의 settings.py 파일에 ALLOWED_HOSTS 정보를 넣어주지 않았다는걸 알게되었다...
따라서 ALLOWED_HOSTS에 WEB과 WAS서버 둘 다의 IP를 각각 적어주어 해결하였다 ..
WEB -> WAS 접속 성공 !
5. 결론
네트워크 문제가 없는데 연결이 안되는 경우, 애플리케이션 설정이나 미들웨어 설정파일을 잘 살펴보자 !
'개인 프로젝트' 카테고리의 다른 글
[K8S] emptyDir 공유 볼륨 사용하기 (0) | 2023.08.17 |
---|---|
[IaC] VirtualBox + Vagrant로 CentOS 환경 구축하기 (0) | 2023.08.09 |
[Django] 상용 환경에서 staticfiles를 찾지 못하는 에러 해결 (0) | 2023.08.07 |
[SQLite] SQLite 특징 (0) | 2023.05.05 |
<FORM> 태그 submit시 confirm 확인하기 (0) | 2022.02.08 |