워드프레스 고유주소 공개 실패. 응답이 유효한 JSON 응답이 아닙니다

워드프레스 고유주소 공개 실패. 응답이 유효한 JSON 응답이 아닙니다

워드프레스를 설치하다보면, 이런 메세지가 나와서 당황한 경험이 있을 것이다.

물론 그래서 본 포스트를 방문하게 되었을 것이다.

0. 원인

이 에러는 “거의”, “항상” 워드프레스가 REST API 요청(=JSON)을 기대했는데, nginx가 404/403/301/502 같은 “HTML 응답”을 돌려줘서 생긴다.
특히 일반(Plain) → 다른 고유주소(예: 글 이름)로 바꾸면 REST URL이 보통 /wp-json/… 형태(Pretty)로 바뀌는데, nginx에 워드프레스용 rewrite(try_files)가 없거나 /wp-json/가 막혀 있으면 바로 발생한다.

아래 순서대로 확인하고, 수정해보자.


1. 먼저 원인 확인 (URL 테스트)

‘브라우저’ 또는 ‘서버에서 curl’로 확인한다.

A. REST 우회 경로 (리라이트 없이도 되는 경우가 많음)

  • https://manida.freeddns.org/index.php?rest_route=/

여기서 manida.freeddns.org 는 본인의 사이트 이름으로 바꿔서 넣자.

정상이라면 JSON(사이트 정보)가 나온다.

B. Pretty REST 경로 (리라이트 필요)

  • https://manida.freeddns.org/wp-json/

역시 manida.freeddns.org 는 본인의 사이트 이름으로 바꿔서 넣자.

정상이라면 JSON이 나와야 한다.


여기가 404/403/301(특히 http로 리다이렉트)/502 라면 그게 이번 문제의 핵심 원인이다.


2. nginx에 워드프레스 “고유주소(Pretty)용” 설정 추가

사이트 설정 파일(보통 /etc/nginx/sites-available/…)의 해당 server {} 블록에 아래의 내용이 들어가야 한다.

핵심은 딱 1줄:

location / {
    try_files $uri $uri/ /index.php?$args;
}

그리고 PHP 처리 블록도 정상이어야 한다(예시):

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;  # 본인 환경에 맞게
}

자주 망가뜨리는 패턴

  • location / { try_files $uri $uri/ =404; } ← 이렇게 되어 있으면 /wp-json/ 같은 경로가 404로 떨어진다. nginx 처음 셋팅하면 이렇게 되어 있을 것이다.
  • /wp-json/를 막는 설정(보안용 deny) / Basic Auth가 걸려 있는 경우


3. 적용 및 테스트

sudo nginx -t
sudo systemctl reload nginx

에러가 뜬다면 설정파일 수정이 잘못 된것이다. 다시 찾아보고 잘못 써진 곳이 없나 확인하자.

그 다음 다시:

  • https://manida.freeddns.org/wp-json/ 가 JSON으로 뜨는지 확인
    → 뜨면 워드프레스 관리자에서 고유주소를 “글 이름” 등으로 바꿔도 정상적으로 동작할 것이다.


4. 그래도 안 된다면 (가장 흔한 2가지 추가 원인)

(1) HTTPS ↔ HTTP 리다이렉트/도메인 불일치

관리자 화면은 https인데 REST 호출이 http로 튀면 브라우저가 막거나(혼합콘텐츠) 인증이 꼬여서 JSON 에러가 난다.
워드프레스 설정 → 일반에서 아래 2개가 완전히 동일한지 확인하자.

  • 워드프레스 주소(URL)
  • 사이트 주소(URL)

둘 다 https://manida.freeddns.org 로 맞추는 게 보통 정답이다.

(2) 403/401(인증/차단) 또는 500대(PHP 오류)

이 경우는 로그를 찾아봐야 한다.

sudo tail -n 200 /var/log/nginx/error.log
sudo tail -n 200 /var/log/nginx/access.log

그리고 “고유주소 저장” 눌렀을 때 /wp-json/로 가는 요청이 몇 번 코드로 실패하는지(401/403/404/500/502/301)를 확인해야 한다.

이건 요청이 있으면 확인해서 추가하도록 하겠다.

필자는 2번까지 해서 해결했다.

Leave a Comment