개발/Nginx

[Nginx] http header에서 Nginx 정보 제거하는 법

BellRiver_Lee 2025. 3. 8. 20:25

개발자 도구나 피들러를 사용하면 해당 웹의 서버를 확인할 수 있습니다.

개발자 도구/피들러:

어떤 웹 페이지들은 서버 이름과 서버 버전 또한 확인할 수 있습니다.
하지만 보안에 좋지 않고, 조금이라도 트래픽을 아끼기 위해 이러한 정보를 숨길 수 있습니다.

오늘은 리눅스 서버의 Nginx에서 서버 버전을 안 보이게 하고, 서버 이름까지 숨기는 방법을 공유하려 합니다.

실행 환경:

  • 리눅스 버전: rhel 8.10
  • Nginx 버전: nginx 1.24.0

서버 버전 정보를 숨기는 법:

리눅스에서 nginx를 설치하면 /etc/nginx/에 nginx.conf라는 파일이 생깁니다.
해당 파일에서 아래와 같은 설정을 주면 서버 버전 정보를 숨길 수 있습니다.

http {
    # 다른 설정들
    server_tokens off;
}

서버 이름 숨기는 법:

서버 이름을 숨기기 위해서는 모듈을 설치해야 합니다.
좀 복잡하지만 천천히 하나씩 해보죠.

리눅스에 가서 아래 명령어를 하나씩 적습니다.
먼저 기본적인 툴을 다운로드하여야 합니다.

# 무난한 /home에서 파일 설치를 진행합니다.
cd /home

wget 'http://nginx.org/download/nginx-1.24.0.tar.gz'

tar -xzvf nginx-1.24.0.tar.gz

yum groupinstall "Development Tools"

yum install pcre pcre-devel

 

모듈 파일 다운로드: 

headers-more-nginx-module 메인 페이지

headers-more-nginx-module 다운로드 페이지

메인 페이지에서는 headers-more-nginx-module을 다운로드하고 적용하는 방법에 대해 적혀 있으며, 
headers-more-nginx-module 다운로드 페이지에서는 headers-more-nginx-module의 버전들을 확인할 수 있습니다.
저희는 지금 시점의 최신 버전인 0.38 버전을 설치하겠습니다.

0.38 버전을 클릭하고 Source code(tar.gz)을 클릭해 다운로드합니다.
파일을 열면 아래처럼 폴더가 하나 보입니다.

이 폴더를 리눅스의 /home/ 안에 넣습니다.

그 후, 리눅스 안에서 아래 코드를 실행해 줍니다.

cd /home/nginx-1.24.0

./configure --with-compat --add-dynamic-module=../headers-more-nginx-module-0.38
# 위 코드 실행 시 zlib라는 라이브러리가 없다면
# dnf install zlib-devel 코드로 라이브러리 설치 가능

make modules
# 위 명령어로 모듈 빌드 가능.

# 모듈을 빌드하면
# /home/nginx-1.24.0/objs 경로에 ngx_http_headers_more_filter_module.so 파일이 생깁니다.
# ngx_http_headers_more_filter_module.so 파일을 /etc/nginx/modules 안에 넣습니다.
# (modules 폴더가 바로가기라면 삭제 후 modules 폴더를 생성해줍니다.)

 

해당 폴더에 들어가서 ngx_http_headers_more_filter_module.so 파일을 복사한 후, 
/etc/nginx/modules/ 이 위치에 붙여 넣어 줍니다.

so 파일 권한을 755로 줍니다.

chmod 755 ngx_http_headers_more_filter_module.so

파일 복사가 끝났으면 /etc/nginx/nginx.conf 파일을 수정해 줍니다.

load_module /etc/nginx/modules/ngx_http_headers_more_filter_module.so;
# 모듈을 불러온다.
# 바로가기를 사용하셨다면 해당 모듈을 바로가기 경로에 맞게 바꿔줍니다.

http {
	# 기타 설정들
    
    server_tokens off;
    # 위 코드는 nginx의 버전 정보를 제거하는 코드.
    more_clear_headers "Server";
    # 위 코드는 server 정보를 없애는 코드.
}

 

nginx를 재시작합니다.

nginx -t
# 위 명령어로 새롭게 작성한 파일에서 nginx가 이상없이 돌아가는지 확인할 수 있습니다.

systemctl restart nginx

nginx에서 계속 문제가 생긴다면 selinux의 문제일 수 있습니다.
아래 명령어로 리눅스 스스로가 nginx 모듈을 실행할 수 있도록 허용해 줍니다.

# nginx가 모듈 파일을 실행할 수 있도록 허용:
sudo chcon -t httpd_modules_t /etc/nginx/modules/ngx_http_headers_more_filter_module.so

# 파일에 대한 SELinux 정책 추가:
sudo setsebool -P httpd_can_network_connect 1

위 조치를 전부 취한 후 nginx를 다시 재시작해줍니다.

마지막으로 피들러나 개발자 모드에서 다시 서버 정보를 확인해 봅니다.

728x90
반응형