우분투 22.04 nginx 업데이트 오류 메시지 나올때

1. 증상

별 생각없이 우분투 22.04 버전이 설치된 서버에 업데이트를 진행했습니다.

sudo apt update
sudo apt upgrade -y

원래라면 별 무리없이 끝나야 했을 업데이트가 중간에 업데이트 에러가 나면서 중단이 됩니다. 그후 업데이트를 시도할 때마가 같은 위치에서 멈추면서 아예 에러가 납니다. 에러 메시지를 자세히 읽어보면 패키지에 이상이 있으니 아래 명령어로 다시 시작해 보라고 합니다.

sudo apt --fix-broken install

마치 위 명령어만 치면 해결될 것처럼 보여서 역시 별문제 아닐거라고 생각하고 명령어를 쳐보지만 여전히 증상이 같습니다. 그런데 느낌이 쎄합니다. ‘응? nginx가 업데이트 되다 에러가 난거면 웹서버가 죽은거네?’ 헉! 이때부터 마음이 급해집니다. 아래는 사건 인지 후 이틀간의 삽질기를 정리한 것입니다.

2. nginx 를 설정을 그대로 둔 상태로 복구하기

웹서버를 업데이트 하다가 뻗었습니다. Laravel Forge로 운영되고 있는 서버에 웹사이트들이 전부 접속이 안 됩니다. 설정은 그대로 있지만 nginx 웹서버가 죽어있는 겁니다. 버전을 확인해보니 1.24.1 에서 1.26.1로 업그레이드 하다가 이상이 발생한 것입니다. nginx 상태를 체크해 보니 fail 이 뜹니다. (왜 나에게 이런일이…ㅠ.ㅠ)

sudo systemctl status nginx

‘exit code’가 발생했다고 하면서 로그를 살펴보라는 메시지가 나온다. 살펴보니 일부 모듈이 1.24.1 버전으로 나온다. 1.26.1로 업그레이드를 해보려고 했는데 잘 안된다. ‘sudo apt –fix-broken install’을 시도해 보라는 메시지가 무한루프로 나온다.

불안함이 극에 달해 모든 데이터를 백업하기 시작했습니다. tar czf , mysqldump 명령어를 뒤져가면서 현타가 오기 시작합니다.

사이트 전체 내용 백업하려면 아래와 같은 형식으로 사용하면 됩니다. 서버를 재설치 해야하는 상황이 올지도 몰라 미리 로컬에 내려 받아 놓습니다.

sudo tar czvf webHomeDirectory_20240620.tar.gz /web/home/directory

백업까지 마치고 ‘apt –fix-broken install’ 명령어를 이용해서 업데이트 실패한 서버 상태를 되돌리기 위해 계속 시도를 하던 중 결국 이 설정을 그대로 유지한 채 nginx를 설치하기 힘들다는 판단을 합니다. 그리고 업데이트 오류가 발생한 서버 두 개 중 하나는 재설치 하기로 결정합니다. (ㅠ.ㅠ)

3. nginx 지우고 재설치하기

구글링을 통해 여러 비슷한 증상들을 접했지만 nginx를 지우고 재설치 하는데 실패했습니다. 즉, 일반적인 방법으로 nginx 삭제조차 되지 않았습니다. 일반적인 nginx 지우고 재설치 하기 입니다.

sudo apt-get --purge remove nginx-*
sudo apt-get install nginx

역시 안 됩니다. ‘apt –fix-broken install’ 명령어를 쳐서 복구해 보라는 메시지만 나옵니다. ㅠ. ㅠ 여기까지 하고 하루가 다 갔습니다. 다음날 출근해서 계속해서 삽질(?)을 이어갑니다. 구글링을 하다가 깃허브에서 비슷한 증상이 있는 글을 발견합니다.

이미 시도해본 방법도 섞여 있습니다. apt 리파지토리를 업데이트 하는 방법부터 캐시를 지우고 다시하는 방법 등 여러가지 방법이 제시된 글입니다. 자신의 서버에 설치된 nginx 서버의 버전을 체크하고 싶다면 아래와 같은 명령어를 사용할 수 있다는 것을 배웁니다.

sudo apt-cache policy nginx nginx-common nginx-core

‘apt-cache policy’ 명령어를 사용하고 뒤에 따라오는 패키지의 설치 정보를 볼 수 있습니다. nginx는 1.26.1로 잘 설치된 상태인데 추가로 설치된 ‘libnginx-mod-brotli’와 ‘libnginx-mod-ssl-ct’ 두 모듈에 문제가 있습니다. 버전이 업데이트 되지 않았다는 메시지도 보입니다.

여기서부터가 제가 성공한 방법입니다. 그대로 따라하시면 되는데 nginx 폴더 자체를 지워버리는 방법이라서 주의가 필요합니다. 꼭 데이터와 DB는 백업을 해둔 상태에서 진행하시는 것을 권해드립니다.

sudo apt purge nginx* libnginx*
sudo rm -rf /etc/nginx

기존 apt 리파지토리 리스트를 변경합니다.

sudo mv "/etc/apt/sources.list.d/nginx.list" "/etc/apt/sources.list.d/.nginx.list"

리파지토리를 업데이트 하고 nginx를 재설치 해줍니다.

sudo apt update
sudo apt install nginx
sudo purge nginx* libnginx*

라파지토리 리스트를 다시 기존 리파지토리로 교체해 줍니다.

sudo mv "/etc/apt/sources.list.d/.nginx.list" "/etc/apt/sources.list.d/nginx.list"
sudo apt update
sudo apt install nginx
sudo apt install libnginx-mod-brotli

DB 복구, 데이터 복구 그리고 SSL 설정까지 참 많은 것을 다시 설정해줘야 했지만 사이트가 올라온 것을 보고 위안을 삼았습니다. 이런식으로 업데이트 에러가 나면 정말 속수무책이 됩니다. 정말 다시는 이렇게 nginx 업데이트가 뻗어서 망연자실한 상황이 오지 않길 바라며 오늘의 삽질. 이상 마칩니다.