Lightsail에서 운영 중인 워드프레스에 외부 도구를 연결하다가 REST API 인증이 되지 않는 문제를 만났습니다. 응용 프로그램 비밀번호를 만들었지만 결과는 HTTP 401, 오류 코드는 rest_not_logged_in이었습니다. 이번에는 사이트 건강에서 인증 헤더 누락을 확인하고 Apache 설정을 수정한 뒤 연결에 성공했습니다.
이 글은 기존 Bitnami 구성에서 실제로 진행한 해결 과정입니다. Lightsail의 모든 워드프레스 인스턴스에 동일하게 적용되는 설정은 아닙니다.
1. 비밀번호 오류인지, 인증 전달 문제인지 구분하기
확인에 사용한 API는 /wp-json/wp/v2/users/me?context=edit입니다. 이 요청으로 로그인한 사용자 정보를 확인할 수 있습니다. rest_not_logged_in은 요청이 인증된 사용자로 인식되지 않았다는 뜻이지, 비밀번호가 틀렸다는 확정적인 진단은 아닙니다.
먼저 사용자 이름에는 워드프레스 로그인 계정을, 비밀번호에는 프로필에서 생성한 응용 프로그램 비밀번호를 사용했는지 확인합니다. 응용 프로그램을 구분하려고 입력한 이름은 로그인 계정이 아닙니다. 워드프레스 공식 문서는 HTTPS에서 Basic 인증으로 응용 프로그램 비밀번호를 사용하는 방법을 안내합니다.
2. 사이트 건강에서 발견한 단서
관리자 화면의 도구 → 사이트 건강 → 상태에서 ‘인증 헤더가 없습니다.’라는 경고를 확인했습니다. 외부 도구가 보내는 인증 정보를 워드프레스가 받지 못할 가능성을 보여 주는 단서였습니다.
안내에 따라 고유주소 설정을 바꾸지 않고 다시 저장했지만, 이번 환경에서는 같은 오류가 계속 발생했습니다. 이후 서버 설정을 살펴보니 워드프레스 디렉터리에 AllowOverride None이 지정되어 있었습니다. 이 경우 해당 디렉터리의 일반적인 .htaccess 변경만으로 해결된다고 가정하면 안 됩니다.
3. 기존 Bitnami의 Apache 설정 확인
Lightsail의 브라우저 SSH로 접속해 다음 파일을 확인했습니다. 아래 경로는 이번 서버에서 확인한 경로이며, 다른 이미지나 설치 방식에서는 다를 수 있습니다.
sudo sed -n '1,160p' /opt/bitnami/apps/wordpress/conf/httpd-app.conf
파일에는 워드프레스 디렉터리와 PHP-FPM을 위한 조건부 설정이 있었고, 해당 디렉터리 블록에는 Authorization 헤더 전달 설정이 없었습니다. 워드프레스 공식 코드 설명에도 일부 CGI/FastCGI 환경에서 Authorization 헤더가 전달되지 않는 경우와 HTTP_AUTHORIZATION을 읽는 처리가 나와 있습니다.
4. 설정을 보관하고 한 줄 추가하기
수정 전에는 설정 파일의 사본을 남깁니다. 이는 설정 복구용 사본이며 데이터베이스와 업로드 파일까지 포함하는 사이트 전체 백업은 아닙니다. 다음 명령은 서버 SSH에서 실행하는 예입니다.
conf=/opt/bitnami/apps/wordpress/conf/httpd-app.conf
backup=$(sudo mktemp ${conf}.before-auth.XXXXXX) && sudo cp -p $conf $backup
echo $backup
복사에 성공했는지 확인하고 출력된 경로를 기록합니다. 그다음 설정 파일을 편집합니다.
sudo nano /opt/bitnami/apps/wordpress/conf/httpd-app.conf
기존 <Directory /opt/bitnami/apps/wordpress/htdocs> 블록 안에 다음 한 줄을 추가합니다. 이미 같은 설정이 있다면 중복으로 넣지 않습니다.
SetEnvIf Authorization (.+) HTTP_AUTHORIZATION=$1
이 줄은 요청의 Authorization 값을 환경 변수로 전달합니다. $1은 정규식으로 잡은 헤더 값이며, 실제 비밀번호를 설정 파일에 쓰는 것이 아닙니다. 문법은 Apache의 SetEnvIf 문서에서 확인할 수 있습니다.
5. 문법 검사 후 반영하고 다시 인증하기
아래 명령은 문법 검사가 성공했을 때만 Apache 설정을 다시 읽습니다. 검사에서 오류가 나면 반영하지 말고 수정한 부분을 확인하거나 보관한 설정 파일로 되돌립니다.
sudo /opt/bitnami/apache2/bin/apachectl -t && sudo /opt/bitnami/apache2/bin/apachectl -k graceful
이번 작업에서는 Syntax OK가 나온 뒤 설정을 반영했고, 같은 응용 프로그램 비밀번호로 연결을 다시 시도해 인증과 글 편집 권한 확인에 성공했습니다.
별도의 연결 도구가 없다면 로컬 터미널에서 아래처럼 확인할 수 있습니다. 도메인과 사용자 이름을 본인 것으로 바꾸면 curl이 비밀번호를 물어봅니다. 그때 응용 프로그램 비밀번호를 입력합니다. 명령 자체에는 비밀번호를 넣지 않습니다.
curl --user 'YOUR_LOGIN_NAME' 'https://YOUR_DOMAIN/wp-json/wp/v2/users/me?context=edit'
응답에는 계정 정보가 들어갈 수 있으므로 전체 결과를 공개하지 않습니다. 이 요청은 사용자 정보 확인용이며 글을 작성하거나 공개하지 않습니다.
같은 오류가 계속된다면
실제로 사용하는 설정 파일을 수정했는지, 인증을 제한하는 플러그인이나 앞단 프록시가 있는지 추가로 확인해야 합니다. HTTP 503처럼 서버 오류가 나오는 경우에는 비밀번호 오류로 단정하지 말고 서버 상태부터 확인합니다.
이번 사례에서는 비밀번호 재발급보다 사이트 건강의 인증 헤더 경고를 확인하고 Apache에서 전달 설정을 보완한 것이 해결로 이어졌습니다. 연결 성공은 인증 문제를 해결했다는 뜻이며, 서버와 플러그인의 업데이트 상태까지 점검이 끝났다는 뜻은 아닙니다.