NGINX 워드프레스 404 not found error 해결 방법
NGINX 웹서버를 사용해서 구동하는 워드프레스의 설정을 변경하고 나서 갑자기 404 not found 에러가 워드프레스 페이지, 또는 카테고리에서 나타나는 경우 NGINX 환경 설정 파일을 수정해서 에러를 해결하는 방법을 안내합니다.
우분투 22.04, 24.04 를 기준으로 설명합니다. 구 버전에서는 NGINX 환경 설정 파일 경로가 다소 다를 수 있습니다.
새 워드프레스를 설치해서 운영할 때마다 자주하는 실수중의 하나입니다.
운영 준비를 위해 워드프레스 설정을 이전 환경과 맞추면서 설정 항목을 변경하다보면 갑자기 웹사이트가 "404 not found" 에러가 뜹니다. 잠깐 멍해집니다.
워드프레스가 에러가 났나? 설정이 꼬여서 뭔가 연결이 끊어진건가? 재설치 해야 하나?는 망상이고 워드프레스 설정을 바꾸면서 NGINX의 기본 경로 표시 설정 값과 맞지 않으면서 나타나는 매우 간단한 문제입니다.
404 에러가 나는 이유
워드프레스로 웹사이트, 블로그를 운영하면 SEO를 위해서 글의 URL 표시를 글 이름으로 표시되도록 설정을 바꾸는 것이 보통입니다.
워드프레스의 글 경로 표시 설정은 설정 > 고유주소 설정에서 변경합니다.
기본 설정은 다음처럼 "일반" 입니다.
"https://alpacca.dev/?p=123" 처럼 ?로 시작하는 숫자로 된 글 고유주소로 표시됩니다. 이걸 "https://alpacca.dev/node-js-express-라우팅과-get-post-라우트-메소드-처리-방법-기초/" 같은 문자열로 된 경로로 표시되도록 "글 이름"으로 표시되도록 설정을 바꾸게 되는데, NGINX가 이렇게 디렉토리 경로 형태로 된 경로를 기본으로 인식하지 못합니다.
NGINX가 워드프레스의 새로운 경로 표시 방식을 못알아 먹으므로 404 에러를 표시하게 됩니다. 그래서 NGINX 설정을 바꿔야 합니다.
NGINX 환경 설정 변경
터미널로 워드프레스를 운영하는 서버에 로그인 후 NGINX 환경 설정 파일을 엽니다.
NGINX의 설치 경로는 "/etc/nginx"입니다. 리눅스 배포판이 다르거나, 다른 경로에 커스텀 설치가 된 경우 "whereis" 명령어로 경로를 찾을 수 있습니다.
> whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz
워드프레스에 도메인을 입혔으면 "/etc/nginx/sites-available" 경로 안에 "내도메인"이름으로 된 텍스트 파일이 있습니다. "내도메인", "내도메인.conf" 파일입니다.
구버전 우분투에서는 "etc/nginx/conf.d/" 디렉토리 밑에 도메인 별 설정 파일이 있습니다.
텍스트 편집기로 파일을 엽니다.
"location / {" 행을 찾습니다. 보통 한 개만 있습니다. 워드프레스에서 경로 처리를 하는 모듈을 설치했으면 여러가지 location 설정이 추가되는데 무시하면 됩니다.
보통 다음처럼 기본 값이 설정되어 있습니다.
location / {
try_files $uri $uri/ @rewrite;
}
"try_files" 행을 다음으로 수정합니다.
location / {
try_files $uri $uri/ /index.php?q=$uri$args;
}
파일을 저장하고 빠져나옵니다. 다른 부분은 수정할 필요 없습니다.
설정 파일을 적용하려면 NGINX를 재시작해야 합니다. 설정만 다시 로딩해도 되는데 그냥 재새작하는 것을 추천합니다.
sudo systemctl restart nginx
웹 페이지를 갱신해서 404 에러가 사라지고 웹 페이지 내용이 표시되는지 확인합니다.