개발/에러 해결

AWS - 사이트에 연결할 수 없음/ 80번 포트 실행 안되는 에러 해결

xeaxonx 2024. 8. 12. 22:16

생애 첫 배포를 진행하며 오랜 시간동안 삽질한 문제 해결에 대한 글이다. 사실 이게 답인지 모르겠지만 어쨌든 해결이 됐으니 기록용으로 써본다.
 

내가 직면한 문제

사이트에 연결할 수 없음...
 
나는 분명 배포 과정에서 하라는 대로 다 했다.
우선 client가 잘 build 되었다.(이것도 사실 꽤 오랫동안 실패했는데 내 경우에는 JavaScript heap out of memory 문제였다. 메모리가 없어서 build가 안되는 상황! swap memory 추가하고 이것저것 해보았지만 다 실패. 결국 aws에서 메모리 큰 인스턴스 유형으로 새로 만들었더니 됐다.)
그리고 server에서 pm2도 잘 돌아가는 걸 확인했는데, public IP를 주소창에 치면 연결을 거부했다고 하는 거다.
 
 
 
이 문제를 구글링했을 때 대부분의 문서에서는 인스턴스의 인바운드 규칙에서 포트 범위 80을 설정하지 않아서라 했다. 하지만 나는 처음부터 설정해서 이 문제는 전혀 아니었다.
 

 

curl http://localhost:5000
curl http://{privateIP}:5000

 

요 두 명령어를 실행하면 나의 index.html이 잘 반환되었다. 그래서 도무지 문제를 몰랐었다. 방화벽이 활성화된 것도 아니었고, Nginx를 재시작해도 똑같았고, 구글링해서 이것저것 해도 변하는 게 없었다. 

 

그러다 원인을 찾았다.
 

원인

sudo netstat -tuln | grep 80

 

이 명령어를 실행하면 80번 포트가 실행되고 있는 게 떠야 하는데, 아무것도 뜨지 않았다.
그러나 내 nginx 설정 파일에는 분명 listen 80이 있었다.
 

server {
    listen 80;   
    location / {
        proxy_pass http://{privateIP}:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

 

Nginx 재시작, 설정 파일 무한 변경과 적용, 에러 로그 등을 봐도 답을 찾을 수 없었다. 그렇게 지피티와 씨름을 하다가 지피티가 마지막에 알려준 명령어로 해결되었다.

 

해결방법

sudo systemctl stop apache2
sudo systemctl restart nginx

 

Apache와 같은 다른 웹 서버에서 이미 80번 포트가 실행 중일 수 있으니 이를 중지하고 Nginx를 다시 시작하는 명령어다.
사실 저거를 입력하니 Failed to sop apache2.service: Uniit apache2.service not loaded라는 말이 떴다. 결국 Apache에서 실행되진 않았던 것 같은데 (사실 당연), 무튼 저렇게 stop하고 restart 후에 다시 sudo netstat -tuln | grep 80을 하니 드디어 떴다!

 

기쁜 나머지 캡쳐는 없고 사진만 찍었다

 
결과적으로 이제 80번 포트에서 실행되니, public IP를 주소창에 입력해도실행되었다!
이게 맞나 싶은 얼레벌레 해결이지만 그래도 남겨본다.

 

'개발 > 에러 해결' 카테고리의 다른 글

AWS Route53 도메인 연결 실패 문제 기록  (0) 2024.08.20