워드프레스 499 에러 확인 및 해결
Nginx + Aapche로 구성된 서버에서 워드프레스를 운영하는 중 Nginx의 로그를 확인했을 때 499 HTTP Code를 확인했습니다. 워드프레스 499 에러가 발생하는 이유는 무엇인지 확인해 보겠습니다.
499 에러 코드는 Nginx(웹 서버)에서 발생하는 오류입니다. 서버가 응답하기 전에 클라이언트가 연결을 끊을 때 발생하며, 클라이언트란 사용자의 웹 브라우저 또는 자동화된 요청 도구(예: WP Rocket, 크롤러, API 클라이언트 등)를 의미합니다.
1. 워드프레스 499 에러 확인
WP Rocket 플러그인이 설정 된 워드프레스 서버에서 캐시 Preload 중에 HTTP 200 코드가 아닌 HTTP 499 코드가 지속적으로 발생되는 것을 확인했습니다.
현재 서버는 Apache 로그가 모두 200으로 서버(백엔드) 처리는 정상적으로 잘 처리되고 있지만, PHP-FPM에서 처리할 수 있는 요청 수가 어느 정도 넘는 것을 확인했습니다.
3.36.243.226 - - [03/Aug/2025:00:36:52 +0900] "GET /wp-xxxxxxxxxxxfdasfdasfas-%EDfdafafdafdffdasf%A5%EC%83%81/ HTTP/1.1" 200 106822 "-" "WP Rocket/Preload"
3.36.243.226 - - [03/Aug/2025:00:36:54 +0900] "GET /xxxxxxxxxxxfdasfdasfas-%EDfdafafdafdffdasf%A5%EC%83%81/ HTTP/1.1" 499 0 "-" "WP Rocket/Preload Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
3.36.243.226 - - [03/Aug/2025:00:36:55 +0900] "GET /1893%EB%85%84xxxxxxxxxxxfdasfdasfas-%EDfdafafdafdffdasf%A5%EC%83%81/ HTTP/1.1" 499 0 "-" "WP Rocket/Preload"
3.36.243.226 - - [03/Aug/2025:00:36:57 +0900] "GET /1893%EB%85%84xxxxxxxxxxxfdasfdasfas-%EDfdafafdafdffdasf%A5%EC%83%81/ HTTP/1.1" 499 0 "-" "WP Rocket/Preload Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"2. 워드프레스 499 에러 해결
먼저 Nginx 설정부터 진행합니다. 워드프레스 499 에러 해결을 위해 첫 번째로 nginx.conf 파일의 설정을 확인했습니다.
2.1 nginx.conf 설정 확인
별도의 서버 블록이 있을 경우 서버 블록에도 동일한 설정을 진행합니다.
# 응답 버퍼 최적화 (Apache → Nginx)
proxy_buffering on;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 512k;
# 클라이언트 요청 본문 버퍼 (POST 요청 대비)
client_body_buffer_size 128k;
# 요청 시간 초과 방지 (502 대응)
proxy_read_timeout 300s;
proxy_connect_timeout 60s;ggproxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;2.2 PHP-FPM 에러 로그
[01-Aug-2025 16:51:12] WARNING: [pool uknew] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 13 total children
[01-Aug-2025 16:51:13] WARNING: [pool uknew] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 15 total children
[01-Aug-2025 16:51:14] WARNING: [pool uknew] server reached pm.max_children setting (16), consider raising it
[01-Aug-2025 16:52:08] WARNING: [pool uknew] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 4 children, there are 1 idle, and 15 total children
[01-Aug-2025 16:52:09] WARNING: [pool uknew] server reached pm.max_children setting (16), consider raising itPHP-FPM 에러 로그를 확인한 결과 처리할 수 있는 요청 수의 한계에 도달 한 것을 확인했습니다.
pm.max_children = 64
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24PHP-FPM 설정을 조정한 후 다시 테스트를 진행한 결과,
WP Rocket 플러그인의 preload 과정에서 발생하던 499 에러 코드가 줄어들고 대부분의 요청이 200 코드로 정상 응답되는 것을 확인했습니다.
다만, 모바일 페이지에 대한 캐시 생성 과정에서는 일부 499 응답이 여전히 발생하고 있습니다. 이는 WP Rocket이 모바일 사용자 에이전트를 기반으로 별도의 캐시를 생성하며, 같은 페이지를 데스크탑/모바일 각각 따로 요청하는 구조 때문입니다.
해당 요청들이 짧은 시간에 몰릴 경우, PHP-FPM 프로세스 수요가 순간적으로 급증하면서 일부 요청이 정상 처리되지 못하고 499 코드로 종료되는 것으로 보입니다.
추가로, 캐시 디렉터리 내 생성된 파일의 용량이 데스크탑과 모바일 버전에서 거의 동일함을 확인했으며, 이는 모바일 버전도 대부분 정상적으로 캐시가 생성되고 있음을 간접적으로 보여줍니다.
3. 결론 & 추가 조치
단순히 프론트엔드에서 방문자가 접속하는 것 외에도, 워드프레스 사이트는 활성화된 플러그인 수가 많을수록 백엔드에서 발생하는 PHP 요청이 상당히 많아질 수 있습니다. 여러가지 결과가 따를 수 있지만 지금 같은 경우는 ‘워드프레스 499 에러’로 결과가 이어졌다고 볼 수 있습니다.
특히 WP Rocket, Rank Math 등 관리자 기능이 많거나 자동화 동작을 수행하는 플러그인은 방문자 없이도 서버 자원을 지속적으로 사용하게 됩니다.
PHP-FPM 설정 및 nginx.conf 및 서버 블록 설정 외에도 사이트에서 불필요한 플러그인이나, 꼭 써야 하는 플러그인이 아니라면 삭제하는 방법을 고려할 수 있습니다.