오랫동안 해결하지 못했던 워드프레스 사이트 상태에서 나타나는 “REST API 오류, cURL error 28” 문제 해결 방법을 찾은 김에 이 REST API 오류 문제 해결 방법에 대해서 간단히 정리해 봤습니다.
워드프레스 버젼 5이상으로 업그레이드 되면서 좋아진 점 중의 하나는 워드프레스가 설치된 사이트 건강 상태를 점검해 알려준다는 점입니다.
그래서 가끔 워드프레스 사이트 상태를 점검해 보는데요. 서버 이전 후 어느 순간 워드프레스 사이트 상태를 살펴보면 “REST API 오류, cURL error 28: Connection timed out after 10000 milliseconds (http_request_failed)라는 오류가 나타나기 시작했습니다.
이 문제를 해결하기 위해 엄청난 구글릴을 했지만 결국 방화벽 문제라는 생각에 방화벽 옵션을 전부 살펴본 끝에 loopback 허용 옵션을 업데이트 함으로써 해결했습니다.
REST API 오류 시 점검 포인트
왜 이런 오류가 나타날까 고민하면서 해결책을 찾으려고 노력했는데요. 오랜 시간이 걸렸지만 결국 문제 해결 방법을 찾고 말았습니다.
어떤 상황에서 이런 오류가 나타날까?
이런 문제는 유료 플러그인에서 라인센스 키를 활성화거나 테마나 플로그인 등을 업데이트 할 시 나타날 수 있습니다.
워드프레스는 CURL을 이용해 다른 웹사이트와 통신합니다. 여기서 주로 사용하는 기능은 “wp_remote_post()”입니다. 이는 라이센스 키를 확인하고 플러그인 업데이트 수행시 반드시 필요한 기능이라고 합니다.
이런 오류 발생시 무엇을 점검해야 하는가
이렇게 “REST API 오류, cURL error 28: Connection timed out” 오류가 발생 시 점검해야하는 것들에는 다음과 같은 것이 있습니다. 이는 이 사이트에 적용중인 generatepress 테마 업체에서 가이드하는 내용을 약간 보완했습니다.
- 서버에 설치된 PHP와 cURL이 최신 버전인 지 확인
PHP 설치 시 CURL은 apt install php8.0-curl 또는 php 7.4버전을 사용한다면 apt install php7.4-curl이라는 명령을 사용해 설치할 수 있음 - PHP 메모리를 늘릴 것
memory_limit = 256M 또는 memory_limit = 512M - cURL 제한 시간을 늘릴 것(increasing your cURL timeout limit)
- 서버 방화벽에서 loopback을 허용하고 있는 지 확인
. sudo iptables -A INPUT -i lo -j ACCEPT
. sudo iptables -A OUTPUT -o lo -j ACCEPT - 서버에서 wp-cron 사용을 제하는 조치를 취한 것이 있는지 서버 관리자에게 문의
- 서버 방화벽이나 보안 모듈에서 cURL 요청이 밖으로 나가지 못하도록 막았는지 서버 관리자에게 문의
마치며
저의 경우는 iptables를 이용해 방화벽을 구축했는데요. 여기에서 loopback 허용을 밖에서 안으로 들어오는 것은 허용했지만 밖으로 나가는 것은 허용하지 않았기 때문에 문제가 발생했었습니다.
iptables에서는 아래와 같이 안과 밖에서 모두 llpback이 가능토록 해야 이 문제가 해결되었습니다.
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
Code language: PHP (php)