개발을 파헤치다/서버 인프라

[Wordpress] 워드프레스 사이트가 갑자기 504 Gateway Error / 502 Bad Gateway Error를 내뿜을 때 해결 방법

개발자_H 2022. 1. 12. 15:32
반응형

Wordpress 504 Gateway Error 502 Bad Gateway Error

 

잘 되던 워드프레스 사이트가 갑자기 접속 자체가 안 되는 경우가 생길 수 있습니다.
그러면서 504 Gateway Error나 502 Bad Gateway 에러가 발생할 수 있는데요.
원인은 여러 군데에서 발생할 수 있으므로 차근차근 따져보아야 합니다.
먼저 AWS EC2에서 워드프레스 사이트가 운영되려면 아래 요소들이 필요합니다.

  • Web Server: Apache나 Nginx 같은 웹서버가 요청을 읽고 처리해주어야 하기 때문에 반드시 필요합니다. 만약 이것이 제대로 작동이 안 된다면 워드프레스 사이트에 접속이 불가합니다.

  • PHP-fpm: Web Server가 받은 요청을 받아서 처리하는 역할을 합니다. 즉, 요청에 맞게 알맞은 워드프레스 사이트의 페이지를 보여준다던가 하는 게 바로 php-fpm의 역할입니다. 그러니 만약 php-fpm이 제대로 일을 하지 않는다면 마찬가지로 워드프레스 사이트가 정상적으로 나오지 않습니다.

  • Database: 보통 MySQL이나 MariaDB를 사용합니다. DB 연결이 끊어진다면 저장된 데이터를 불러올 수 없기 때문에 이 역시 문제를 일으킬 수 있습니다.

  • Wordpress: 워드프레스의 코드에 에러가 있을 때 역시 제대로 된 페이지가 나오지 않게 됩니다. 흔히 오류가 포함된 플러그인을 설치한 경우나 플러그인들끼리 충돌이 난 경우 발생할 수 있습니다.


이 네 가지에서 오류가 발생하면 워드프레스 접속이 되지 않는데요. 하지만 504 Gateway Error나 502 Bad Gateway Error는 php-fpm에서 문제가 생겼을 확률이 높습니다. 몇 가지 이유가 있는데요.

  1. Web Server에 문제가 생긴 경우 504나 502 에러 페이지조차 뜨지 않습니다. 이 경우 아예 페이지에 접근할 수 없다고 브라우저에서 오류가 뜨는 게 일반적입니다. 즉, 웹서버가 에러 페이지를 보여줬다는 것은 웹서버는 정상 작동한다는 의미죠.

  2. DB나 Wordpress에서 문제가 생긴 경우에는 PHP가 에러를 보여줍니다. 만약, Debug 모드가 꺼져있다면 최소한 500 Internal Server Error라고 나옵니다.

위의 두 가지 이유 때문에 Web Server에서 요청을 전달해주는 PHP-fpm 에러라고 생각한 것이죠.
그럼 실제로 맞는지 php-fpm 에러 로그를 확인해봐야 합니다.

먼저 ssh를 통해 EC2 인스턴스에 접근합니다.
윈도의 경우 Putty를 사용해서 접속하고 Mac의 경우 아래 명령어를 사용합니다.

ssh -i [pem 키파일] bitnami@[ec2 public ip]


php-fpm 로그가 있는 곳으로 이동합니다.

cd /opt/bitnami/php/logs

 

로그 내용을 확인합니다.

sudo cat ./php-fpm.log

 

php-fpm Memory Problem

확실히 이쪽에서 에러가 발생한 게 맞았네요. 에러를 확인해보니 PHP-fpm에서 동시에 사용할 수 있는 프로세스가 한계치에 다다랐다는 내용입니다. 그러니까 결국은 메모리가 꽉 차서 더 이상 일을 할 수 없는 상태에 이르렀다는 것이죠. 이 경우 서버의 메모리를 늘려줘야 합니다.

 

반응형

 

 

AWS 콘솔로 이동한 뒤 해당 인스턴스를 중지해줍니다.
중지가 완료되면 해당 인스턴스를 선택한 뒤, 작업 > 인스턴스 설정 > 인스턴스 유형 변경을 선택한 뒤 더 높은 인스턴스로 바꿔줍니다.
그리고 다시 인스턴스를 시작하면 됩니다.

만약 재시작 후에도 워드프레스 사이트에 제대로 접속이 안된다면 기존 php-fpm 프로세스들이 메모리를 점유하고 있어서일 확률이 큽니다. 이때는 직접 php-fpm 프로세스들을 모두 중단하고 웹서버, php-fpm, db를 재시작해주는 것이 좋습니다.

sudo killall -KILL php-fpm
ps -ylC php-fpm --sort:rss

위 명령어를 실행하면 아무것도 뜨지 않아야 제대로 프로세스가 종료된 것입니다.
이제 차례대로 필수 구성요소들을 재시작해줍니다.

sudo /opt/bitnami/ctlscript.sh restart nginx
sudo /opt/bitnami/ctlscript.sh restart mariadb
sudo /opt/bitnami/ctlscript.sh restart php-fpm


bitnami에서 제공해주는 스크립트를 활용해 구성 요소들을 재시작해줍니다.
이렇게 한 뒤, 1~2분 정도 기다리면 이제 워드프레스 사이트가 정상적으로 나오게 됩니다.

반응형