서버 버전 정보 숨기기, Apache Nginx PHP

핵심 요약
  • Apache는 ServerTokens Prod와 ServerSignature Off, Nginx는 server_tokens off, PHP는 expose_php = Off로 버전 노출을 줄인다.
  • 버전을 숨겨도 서버가 더 안전해지는 것은 아니며, 업데이트를 대신하지 못한다.
  • 설정 후에는 curl -I로 Server와 X-Powered-By 헤더를 직접 확인한다.

웹 서버는 응답할 때마다 “저는 Apache 2.4.x입니다”, “PHP 8.x로 만들었습니다” 같은 정보를 헤더(응답 앞부분의 안내 정보)에 실어 보내는 경우가 있습니다. 이 정보가 보이면 공격자가 약한 버전을 노리기 쉬워집니다. 그래서 보안 점검 도구는 대부분 버전 노출을 경고 항목으로 보여 줍니다.

먼저 현실적인 기대치를 맞춰 둡니다. 버전 숨기기는 정보 노출을 줄이는 작은 정리입니다. Apache 문서는 Server 헤더를 꺼도 서버가 더 안전해지는 것은 전혀 아니라고 분명히 적습니다. 이 글은 Apache, Nginx, PHP 세 곳의 설정과 확인 방법을 순서대로 안내합니다.

지금 어떻게 보이는지 먼저 확인

서버 설정을 바꾸기 전에 응답 헤더를 확인합니다.

curl -I https://example.com/

결과에 아래 같은 줄이 있으면 노출 상태입니다.

Server: Apache/2.4.xx (Ubuntu)
X-Powered-By: PHP/8.x.x

외부에서 보이는 헤더는 프록시, CDN, 로드밸런서가 바꾸거나 붙인 값일 수 있습니다. 헤더만으로 실제 서버 버전을 확정할 수 없다는 점도 기억해 둡니다. 사이트 주소를 넣어 보안 헤더를 한 번에 보는 도구도 있습니다.

Apache. ServerTokens와 ServerSignature

Apache 2.4 문서 기준으로 두 지시어는 이렇게 다릅니다.

지시어기본값역할설정 위치
ServerTokensFullServer 응답 헤더에 담는 정보의 양서버 전체 설정만 가능
ServerSignatureOff오류 페이지 등 서버가 만든 문서 하단의 서버 정보 줄서버, 가상호스트, 디렉터리, .htaccess

ServerTokens의 값별 Server 헤더 결과는 문서 예시를 따르면 다음과 같습니다.

값헤더 예
FullApache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2
OSApache/2.4.2 (Unix)
MinimalApache/2.4.2
MinorApache/2.4
MajorApache/2
ProdApache
ServerTokens Prod
ServerSignature Off

문서에는 ServerTokens가 서버 전체에만 적용되고 가상호스트별로 따로 정할 수 없다는 설명이 있습니다. 또 Prod보다 더 줄이면 문제 해결이 어려워진다고 설명합니다. Ubuntu·Debian은 /etc/apache2/conf-available/security.conf에 이 항목이 있는 구성이 흔하지만, 배포판마다 파일 위치가 다르니 grep -ri servertokens /etc/apache2 /etc/httpd로 먼저 찾아봅니다. 수정 뒤에는 문법 검사 후 재로드합니다.

sudo apachectl configtest
sudo systemctl reload apache2

서비스 이름은 Debian 계열은 apache2, RHEL 계열은 httpd입니다.

HSTS·CSP 같은 보안 헤더가 어떻게 설정되어 있는지 바로 확인할 수 있습니다.

보안 헤더 검사하기

Nginx. server_tokens off

Nginx 문서 기준으로 server_tokens의 기본값은 on이고, http, server, location 어디에나 둘 수 있습니다. on이면 오류 페이지와 Server 헤더에 Nginx 버전이 나옵니다.

http {
    server_tokens off;
}

문서에는 build 값(1.11.10 이후)도 있어 빌드 이름까지 내보냅니다. 임의 문자열을 쓰는 방식은 상용 구독에서만 가능하다고 되어 있으므로 일반 오픈소스 Nginx에서는 off가 현실적인 선택입니다. 적용은 다음과 같습니다.

sudo nginx -t
sudo systemctl reload nginx

PHP. expose_php와 X-Powered-By

PHP는 expose_php가 켜져 있으면 X-Powered-By: PHP/버전 헤더를 보냅니다. PHP 매뉴얼에서 기본값은 켜짐입니다.

expose_php = Off

이 항목은 php.ini에서만 바꿀 수 있습니다. 매뉴얼 기준으로 httpd.conf, .htaccess, ini_set()으로는 설정되지 않습니다. 어느 php.ini를 읽는지는 php --ini(CLI)나 phpinfo 화면에서 확인할 수 있으며, 웹과 CLI가 다른 파일을 읽는 경우가 많습니다. 수정 후에는 PHP-FPM이나 Apache를 재로드해야 반영됩니다. 다른 PHP 보안 항목은 php.ini 보안 설정 글에서 이어서 봅니다.

적용 확인과 한계

설정 후에 curl -I를 다시 실행해 Server 줄이 Apache 또는 nginx로 줄었는지, X-Powered-By 줄이 사라졌는지 봅니다. 값이 그대로면 설정이 다른 파일에 덮어써졌거나, 앞단 CDN·프록시가 값을 붙이고 있을 수 있습니다.

버전 숨기기에는 한계가 분명합니다. 오류 페이지 모양, 동작 차이, 특정 파일 경로로도 서버 종류는 추정될 수 있습니다. 그러니 이 설정은 업데이트와 보안 헤더 설정 뒤에 하는 마무리 단계로 두세요. 보안 헤더 전반은 보안 헤더 설정 방법 글을, 서버 전체 점검 순서는 리눅스 서버 보안 체크리스트를 참고합니다.

IIS, LiteSpeed 등 이 글에서 다루지 않은 서버는 해당 제품 문서를 확인해야 하며, 직접 확인하지 못해 설정을 적지 않았습니다.

보안 헤더 검사HSTS·CSP·X-Content-Type-Options 등 6개 헤더의 값 평가을 무료로 확인할 수 있습니다.

보안 헤더 검사하기

자주 묻는 질문

버전을 숨기면 해킹을 막을 수 있나요?

막지 못합니다. Apache 문서도 Server 헤더를 끄는 것만으로는 서버가 더 안전해지지 않는다고 적어 둡니다. 자동 스캐너가 버전을 보고 고르는 일을 조금 불편하게 만드는 정도이며, 핵심은 최신 보안 업데이트 적용입니다.

Nginx에서 Server 헤더를 아예 없앨 수 있나요?

server_tokens off는 버전 숫자만 감추고 nginx라는 이름은 남깁니다. 값을 임의 문자열로 바꾸는 string 옵션은 Nginx 문서상 상용 구독 버전에서만 제공됩니다.

expose_php를 .htaccess에서 바꿀 수 있나요?

PHP 매뉴얼은 expose_php를 php.ini에서만 설정할 수 있는 항목으로 표시합니다. httpd.conf, .htaccess, ini_set()으로는 바꿀 수 없으므로 php.ini를 수정하거나 호스팅 업체에 문의해야 합니다.

공유 호스팅에서는 어떻게 하나요?

서버 설정 파일을 직접 만질 수 없는 경우가 많습니다. 호스팅 관리 패널에 PHP 설정 메뉴가 있는지 확인하고, 없으면 업체에 문의하세요. 숨기는 설정보다 PHP 버전을 지원되는 버전으로 유지하는 것이 우선입니다.

확인한 자료

기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.

Next