EC2에 Nginx /etc/nginx/sites-available 설정 중 오류들 해결

Atmosphere·2025년 7월 24일

DevOps

목록 보기
6/6
post-thumbnail

목표

EC2에 Nginx 설정
/etc/nginx/sites-available 설정법
프록시 설정: 80 → 3000번 포트(예시)

참고사항
오늘 실습 전체의 흐름은 참고 첫번째 링크에 다 나와있다!
원래 nginx랑 certbot으로 https 적용을 한 포스트 안에 다하려고 했는데
아차차! nginx 설정만 해도 오류가 많아 나누게 되었다

실습을 진행하며 생긴 오류 순서대로 번호를 부여했고, 내용이 다 이어져있어 뒤에 내용까지 보면 이해가 될거라 생각한다.

이번 포스트는 약 2시간 넘게 오류만 고친 사람의 기록이다
(정신 찵이고 포스트 찵여.)

이번 실습은 GPT를 쓰지 않고 진행했다.(그래서 마지막 부분이 안풀리고 있다)

1. Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 884 (unattended-upgr)

sudo apt-get install nginx를 시도하던 중 발생한 오류

구글링 → process 884에 lock이 걸려있다. 이걸 지우면 해결. → ps -ef로 확인 →

?
884번 프로세스는 없었음. 차분히 다시 sudo apt-get install nginx를 입력하니 다른 오류가 떴다.

2. You don't have enough free space in /var/cache/apt/archives/.

공간이 부족하다!

구글링 → df -h로 상태를 확인해보니 /dev/root의 용량을 100% 전부 다 썼음을 확인 할 수 있었다.

EC2 인스턴스 볼륨의 용량 부족문제 임을 확인 하고 볼륨 수정하여 8 GiB → 32GiB로 늘려줬다. (내 요금 ^_ㅜ)
볼륨만 수정했다고 끝이 아니다. 사용하던 파티션을 늘린 용량만큼 확장 해줘야한다. lsblk로 디스크 상태를 확인해보면,

밑에 있는 xvda1이 변경해줘야할 파티션이다. → xvda1 파티션을 확장해보자

growpart라는 파티션을 확장해 주는 명령어를 사용한다.

#sudo growpart /dev/파티션명 파티션번호
sudo growpart /dev/xvda 1

3-1. cannot create directory ‘/tmp/growpart.908’: No space left on deviceFAILED: failed to make temp dir

얘도 뭔가 저장공간의 문제.

블록 디바이스에 남은 공간 없음 오류를 방지하려면 임시 파일 시스템 tmpfs를 /tmp 탑재 지점에 탑재합니다. 그러면 /tmp에 탑재된 10M tmpfs가 생성됩니다.

sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
이렇게 입력 후 다시 sudo growpart /dev/xvda1 해주면 되는 줄 알았다.

3-2. GPT PMBR size mismatch (16777215 != 67108863) will be corrected by write. The backup GPT table is not on the end of the device.

sudo sfdisk --list /dev/xvda로 파티션 테이블을 확인하려 했는데 발생한 오류.

root로 전환 후 parted라는 명령어를 사용하여 GPT 정보를 수정하여 오류를 해결했다.

이렇게 입력해준 후 다시 fdisk를 해보면 에러메시지가 사라져있다.

(중간에 도커 이미지/컨테이너 크기땜에 부족한 줄 알고 지우려다가 도커 데몬 이 실행이 안되서 헤맨건 안비밀.. 여전히 모르겠다)

→ 이제 파일 시스템에 변경된 파티션 크기를 적용하자
sudo resize2fs /dev/xvda1 입력 후 다시 df -h로 확인해보면


사용공간이 늘어났음을 확인했다!

이제 다시 nginx 설치로 돌아가서,

sudo apt-get install nginx 실행
근데 실행 중 failed가 자꾸 뜨고 안되길래 apt-get update해줬는데도 계속 오류가 떴다.

4. Some index files failed to download. They have been ignored, or old ones used instead.

DNS 서버 확인 후 수정하라길래 그대로 했다.
vi /etc/resolv.confnameserver 8.8.8.8을 추가하여 저장.

다시 apt-get update시도하니 업데이트가 잘 됬다.

5. sudo: unable to resolve host ip주소: Name or service not known

뭔가를 알 수 없다..?

/etc/hostname과 /etc/hosts 두 파일의 내용이 달라서 그렇다고 한다.
나는 /etc/hostname에 있는 ip주소를 /etc/hosts에 그대로 넣어줬다.

여기까지하면 그제야 sudo apt-get install nginx을 할 수 있다.

service nginx start로 nginx 실행 후 http://localhost:80으로 접속(http가 80번 포트를 의미하기에 생략 가능)

/etc/nginx안에서 주요하게 봐야할 것

  • site-available/: nginx에서 관리되는 호스트 정보
  • site-enabled/: site-abailable/에서 만든 사이트를 site-enabled/에 추가해야 활성화 됨. site-available/에 추가한 사이트를 site-enabled/에 심볼릭 링크하여 사이트를 활성화 할 수 있습니다.

nginx 설치시 기본으로 설치된 설정 파일 제거 → 1. 서버 생성(참고 첫번째 링크에 있음) → 2. site-available 사이트 추가

vim /etc/nginx/site-available/server1에 아래 코드 입력 후 저장

server {
        listen 80 ;
        listen [::]:80;

        root /home/server1;
        server_name server1 www.server1.com;

        access_log /var/log/nginx/server1.access.log;
        error_log /var/log/nginx/server1.error.log;

        location /server1/ {
                proxy_pass http://127.0.0.1:3000/;
        }
}
  1. site-enabled 사이트 활성화

마지막으로 site-available에 추가한 사이트를 site-enabled에 심볼릭 링크로 연결

ln -s /etc/nginx/sites-available/server1 /etc/nginx/sites-enabled/server1


nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx -s reload하면 curl http://localhost:3000시 응답이 잘 오는 것 처럼 웹사이트에도 응답이 떠야하는데 난 계속 404 NOT FOUND만 떴다.

6. Command 'nvm' not found

shell 에서 nvm을 실행시킬 때 필요한 환경변수가 제대로 세팅이 되어있지 않아서 생긴 문제라고 한다.

자신이 쓰는 쉘에 따라 방법이 조금 다르다. 난 bash를 쓴다.

bash 인 경우: vi ~/.bashrc
zsh 인 경우: vi ~/.zshrc

키보드 i 를 누르고 아래 코드를 입력하고 ESC 키를 누르고 :wq! 입력

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

그리고 터미널을 재로그인하거나, source 명령어로 스크립트 실행

source ~/.bashrc or source ~/.zshrc

7. had too many unstable restarts (16). Stopped. "errored"

pm2 log 찍으면 계속 나오는 에러메시지

뭘 하지도 않았는데 reload가 저렇게 많이 된다고? (당황)

찾아보니 오래된 버전의 라이브러리가 있다면 이럴 수도 있대서 지우고 다시 설치했다.

pm2 kill
rm -rf node_modules
npm i
authbind --deep pm2 start app.js

여전히 해결이 안된 부분

  • localhost/server1로 접속한 웹사이트에 응답이 뜨지 않고 계속 404 NOT FOUND로 뜬다. 아무리 검색해도 안나와서 이건 GPT한테 후에 물어보고 고친 후 다시 포스트 업로드 해야겠음.

  • 여전히 도커 데몬이 실행되지 않는다... 으악!

  • 그리고 pm2 상태가 계속 바뀐다. 건들지 않아도 어쩔땐 online이다가 어쩔땐 errored였다가..

쓰다보니 /etc/nginx/sites-available 보단 그냥 오류 나열에 가까워지게 된거같다.. 정리해서 쓰는게 너무 어렵다 일단 쓰고 봐야한다.

궁금한 점

  • 분명 npm init으로 초기화를 했는데 왜 ./bin/www가 안생겼지?
  • 내가 재접속을 안했는데 왜 reload 수가 늘어나지?
  • 파티션과 디스크 쪽의 정확한 개념들과 자세한 설명 필요

이어서 해야할 것

  • certbot으로 https 적용
  • docker demon 안돌아가는 거 고치기
  • 도커/쿠버네티스 책 첫파트 블로그 업로드
  • 개인 도메인 복구
  • python 공부 → 블로그 업로드

참고

profile
작게, 빠르게, 지속가능하게

0개의 댓글