Web

[Nginx] Amazon Linux EC2에서 nginx 서버 정보 제거를 위한 모듈 설정

돌돌찐 2024. 10. 9. 15:55

배경

Superset을 EC2 상에서 도커를 활용해 빌드한 상황.

보안 테스트를 위해 Superset이 연결되지 않았을 때 에러 테스트 등을 진행했는데, 헤더 값에 Nginx + 버전 정보가 담겨있어

이를 제거 하기 위한 작업을 진행하게 되었다.

 

작업

  • nginx Server 헤더 정보 내 버전 정보만 삭제하기 위해서는 server_tokens만 추가하면 된다.
sudo vi /etc/nginx/nginx.conf

http {
	server_tokens off;
    ...
}

 

-> 그럼 'server : nginx 1.22.1' 과 같은 모습이 'server : nginx'로만 뜬다.


  • Server 헤더 내 nginx 자체를 완전히 없애려면 more_set_headers 설정이 필요한데,
    이를 설정하기 위해서는 NGINX 모듈인 ngx_http_headers_more_filter_module이 필요하다.
http {
	server_tokens off;
	more_set_headers "Server: myServer";
    ...
}
  • Debian/Ubuntu에서 설치 시, 
sudo apt-get install nginx-extras
  • CentOS/RHEL에서 설치 시,
sudo yum install nginx-mod-http-headers-more
  • Amazon Linux는 해당 모듈을 지원하지 않기 때문에, nginx 동적 모듈로 컴파일해서 적용해 주어야한다.
cd /usr/local/src

# headers-more 모듈을 다운로드
sudo wget https://github.com/openresty/headers-more-nginx-module/archive/v0.34.tar.gz

# 다운로드한 모듈 압축 해제
sudo tar -zxvf v0.34.tar.gz

# Nginx 소스를 다운로드 (1.22.1 버전 예시)
sudo wget http://nginx.org/download/nginx-1.22.1.tar.gz

# 압축 해제
sudo tar -zxvf nginx-1.22.1.tar.gz

cd nginx-1.22.1

# 현재 Nginx의 컴파일 설정 확인
nginx -V

# 확인한 설정 값을 가지고 (configure arguments) 모듈 재컴파일
NGINX_CONFIGURE_OPTIONS=$(nginx -V 2>&1 | grep 'configure arguments')

sudo ./configure $NGINX_CONFIGURE_OPTIONS --add-dynamic-module=/usr/local/src/headers-more-nginx-module-0.34

# 동적 모듈로 컴파일
sudo make modules

# 컴파일된 모듈 nginx 모듈 디렉토리로 복사 (modules 디렉토리 없으면 생성 후 작업)
sudo cp objs/ngx_http_headers_more_filter_module.so /etc/nginx/modules
  • NGINX_CONFIGURE_OPTIONS : 현재 설정 옵션을 저장하는 변수입니다.
  • sed 's/configure arguments: //' : Nginx 설치 시의 설정 옵션 부분만 추출합니다.
  • 추가적으로 난 해당 설정으로 컴파일 시, --with-cc-opt 설정이 자꾸 에러가 나서 빼고 컴파일을 진행했었고,
    그래서 sed 's/--with-cc-opt='\\''-O2 -g.*//' 을 추가했었다.
    -> --with-cc-opt에서 시작하는 디버깅 플래그(g)를 제거.
  • nginx 설정 파일 내용 추가
# nginx.conf 파일 수정

load_module modules/ngx... # 추가

...
http {
	...
	more_set_headers "Server: myServer"; # 추가
}
...
  • 적용을 위해 nginx 재기동
sudo systemctl restart nginx

sudo systemctl status nginx

 

트러블슈팅

  • 이후 nginx 설정 파일 문법이 맞나 체크하면 자꾸 에러 발생
sudo nginx -t 

nginx:[emerg] module "/etc/nginx/modules/ngx_http_headers_more_filter_module.so" is not binary compatible in /etc/nginx/nginx.conf : 2
  • 원인이 무엇인지 엄청 찾아 해맸는데 결국 컴파일 할 때부터 문제였고, 옵션을 추가해주고 해결했다.
# --with-compat 추가 필요
sudo ./configure --with-compat $NGINX_CONFIGURE_OPTIONS --add-dynamic-module=/usr/local/src/headers-more-nginx-module-0.34