Expires Headers 오류는 PHP 업그레이드 이후 사이트 점검 과정에서 발견했습니다. GTmetrix로 속도를 측정하던 중 브라우저 캐시 관련 항목에서 점수가 낮게 표시되었고, 응답 헤더를 확인해 보니 Expires 값이 제대로 전달되지 않고 있었습니다.
이미 LiteSpeed Cache를 사용하던 사이트도 있었기 때문에 처음에는 캐시 플러그인 문제라고 생각했습니다. 그런데 서버 자체에서 만료 헤더가 적용되지 않는 상태였고, Apache 모듈과 .htaccess 설정을 함께 수정한 뒤 정상적으로 작동했습니다.
목차
Expires Headers 오류 확인부터 진행
브라우저 개발자 도구(F12)를 열고 Network 메뉴에서 이미지나 CSS 파일을 선택하면 응답 헤더를 확인할 수 있습니다.
정상이라면 Cache-Control 또는 Expires 항목이 표시됩니다.

당시에는 해당 값이 보이지 않았고 GTmetrix에서도 Expires Headers 오류가 계속 보고되고 있었습니다.
Apache 모듈부터 점검한 이유

만료 헤더는 Apache의 Expires 모듈이 활성화되어 있어야 동작합니다.
Bitnami 기반 라이트세일 서버는 버전에 따라 비활성 상태인 경우가 있기 때문에 먼저 서버 설정을 확인했습니다.
SSH 접속 후 아래 파일을 열었습니다.
sudo nano /opt/bitnami/apache2/conf/httpd.confExpires 모듈 활성화 상태 확인
httpd.conf 파일 안에서 Expires 모듈과 Headers 모듈을 확인했습니다. 앞에 # 기호가 붙어 있다면 주석 처리 상태이므로 활성화가 필요합니다.

수정 후 Apache를 재시작하니 서버에서는 만료 헤더 기능을 사용할 준비가 완료되었습니다.
sudo /opt/bitnami/ctlscript.sh restart apacheExpires Headers 오류 해결을 위한 .htaccess 설정
모듈만 활성화했다고 해서 모든 파일에 만료 헤더가 적용되는 것은 아니었습니다. 실제 캐시 기간을 지정하는 규칙도 추가해야 했습니다.
LiteSpeed Cache나 다른 캐시 플러그인의 브라우저 캐싱 기능을 사용한다면 자동으로 생성되는 경우도 있지만, 수동으로 관리하는 환경에서는 .htaccess에 직접 추가해야 합니다.
SSH에서 다음 경로로 접근했습니다.
sudo nano /home/도메인/public_html/.htaccess
이미지 파일은 1년, CSS와 JavaScript는 1개월 정도의 만료 기간을 적용했습니다. 설정 이후 다시 GTmetrix를 측정했을 때 Expires Headers 오류 항목이 사라졌습니다.
설정이 적용되지 않았던 원인
모든 설정을 마쳤는데도 변화가 없었던 적이 있었습니다. 원인을 추적해 보니 .htaccess 자체가 서버에서 무시되고 있는 상태였습니다. Apache에서 AllowOverride 값이 제한되어 있으면 .htaccess 규칙을 읽지 못합니다.
해당 값을 확인한 뒤 수정하니 정상 반영되었습니다.
sudo nano /opt/bitnami/apps/phpmyadmin/conf/httpd-app.conf
AllowOverride가 None으로 되어 있으면 .htaccess 규칙이 동작하지 않을 수 있습니다.
OpenLiteSpeed 환경은 다를 수 있다
현재 저는 OpenLiteSpeed와 LiteSpeed Cache를 사용하는 사이트도 운영하고 있습니다. OpenLiteSpeed 환경에서는 Apache 방식의 모듈 활성화 과정을 진행하지 않습니다.
대부분 LiteSpeed Cache 또는 WebAdmin 설정에서 브라우저 캐싱을 처리하게 되므로 Apache 전용 설정을 그대로 적용하면 혼동될 수 있습니다. 따라서 Expires Headers 오류가 발생했다면 사용 중인 웹 서버가 Apache인지 OpenLiteSpeed인지 먼저 확인하는 편이 좋습니다.
적용 후 달라진 점
설정을 마친 뒤 GTmetrix 재측정 결과에서 만료 헤더 관련 경고가 사라졌습니다.
정적 파일 재요청도 줄어들었고 이미지와 CSS 파일의 캐시 유지 시간이 정상적으로 표시되었습니다. 대규모 성능 향상이 체감될 정도는 아니었지만 HTTP 요청 수가 감소하면서 반복 방문 환경에서는 확실히 안정적인 결과를 확인할 수 있었습니다.
워드프레스 최적화 과정에서 캐시 플러그인만 확인하는 경우가 많은데, 서버 측 만료 헤더 설정도 함께 점검하는 것이 중요하다는 점을 다시 느꼈습니다.
FAQ
Expires Headers 오류가 꼭 해결해야 하는 문제인가요?
사이트가 정상적으로 열리더라도 브라우저 캐시가 제대로 활용되지 않을 수 있습니다. 속도 최적화 항목에서는 중요한 부분입니다.
Expires Headers 오류가 있는데 LiteSpeed Cache를 사용 중입니다.
LiteSpeed Cache 설정과 서버 설정이 서로 다를 수 있습니다. 응답 헤더에서 Cache-Control과 Expires 값이 실제로 출력되는지 확인하는 것이 좋습니다.
OpenLiteSpeed에서도 같은 방법을 사용하나요?
아닙니다. OpenLiteSpeed는 Apache 모듈 방식과 다르기 때문에 LiteSpeed Cache 또는 WebAdmin 설정을 먼저 확인하는 편이 좋습니다.





