답변:
추가하여 Nginx 및 OS 버전 출력을 중지 할 수 있습니다
server_tokens off;
A와 http
, server
또는 location
상황.
또는 서버 헤더를 완전히 제거하려면 헤더가 Nginx 소스에 하드 코딩되어 있으며이 모듈을 사용하면 http 헤더를 변경할 수 있으므로 Headers More 모듈을 사용하여 Nginx를 컴파일해야합니다.
more_clear_headers Server;
그러나 서버가 구현을 통해 실수로 시스템을 식별하는 데 도움이되는 숨겨진 방법이 많이 있습니다. 예 : 잘못된 SSL 요청에 응답하는 방법 이것을 막는 실용적인 방법은 보이지 않습니다.
내가 제안 할 수있는 것 중 일부 :
데비안 또는 우분투에서 apt-get을 사용하여 nginx를 설치 한 경우 nginx-extras 패키지를 설치하여 "서버"헤더를 설정하거나 지우십시오.
이 작업이 완료되면 nginx.conf (보통 /etc/nginx/nginx.conf)에 아래 줄을 추가 할 수 있습니다.
"서버"헤더를 모두 지우려면 :
more_clear_headers Server;
사용자 정의 문자열을 "서버"로 설정하려면
more_set_headers 'Server: some-string-here';
more_clear_headers Server;
작품뿐만 아니라 데비안 제시 8.5의 nginx 버전 : nginx를 / 1.6.2
sudo apt-get install nginx-extras
헤더 설정
unknown directive "more_set_headers"
. 에서 모듈을 명시 적으로 활성화하여 해결했습니다 /etc/nginx/nginx.conf
. load_module modules/ngx_http_headers_more_filter_module.so;
구성 파일의 시작 부분에 추가하기 만하면 됩니다.
@Martin F. 그렇습니다. 소스에서 컴파일하고 소스를 컴파일하기 전에 필요한 것을 변경해야합니다.
압축을 푼 마지막 안정적인 버전을 다운로드했다고 가정하고 파일의 위치를 알고 있습니다. 이 경우 다음을 수행하십시오.
nano src/http/ngx_http_header_filter_module.c
그런 다음 올바르게 기억하면 48 행을 찾으십시오.
static char ngx_http_server_string[] = "Server: nginx" CRLF;
nginx를 MyWhateverServerNameIWant로 바꾸십시오. 예 :
static char ngx_http_server_string[] = "Server: MyWhateverServerNameIWant" CRLF;
그때
nano src/core/nginx.h
줄을 찾으십시오
#define NGINX_VER "nginx/" NGINX_VERSION
"nginx /"를 "MyWhateverServerNameIWant /"로 변경하십시오.
#define NGINX_VER "MyWhateverServerNameIWant" NGINX_VERSION
마지막으로 버전 번호도 변경하려면
#define NGINX_VERSION "1.0.4"줄을 찾으십시오.
원하는 버전에 맞게 "1.0.4"를 변경하십시오. 예를 들어
#define NGINX_VERSION "5.5.5"
도움이 되길 바랍니다. 그렇지만. 서버 보안은 실행중인 것을 보여주지 않습니다. PHP는 본질적으로 안전하지 않으며 Linux도 마찬가지입니다. 물론 리눅스는 적절한 보안을 달성하기 위해 필요한 모든 조치를 취하면 상당히 안전 할 수 있습니다. PHP에 관해서는 Suoshin 을 사용 하여 코드의 보안을 강화하는 것이 좋습니다 .
우분투에서 nginx의 사용자 정의 풍미를 수행하는 방법을 많은 시간을 들여서 연구 한 결과, lua 모듈을 사용할 수 있다는 것을 깨달았습니다.
우분투 14.04에서 nginx-extras
패키지 를 설치하면 다음 을 사용하여 서버 헤더를 제거 할 수 있습니다.
header_filter_by_lua 'ngx.header["server"] = nil';
http 블록에 이것을 던지면 모든 요청에 Server
헤더가 없습니다.
작동하지 않으면 nginx -V
lua 모듈이 nginx 사본에 컴파일되어 있는지 확인하십시오. 그렇지 않은 경우 다른 패키지를 사용할 수 있습니다.
nginx-extra
만든 more_set_headers "Server: whatever";
작품, 그래서 +1 : D
header_filter_by_lua 대신 중괄호 ( ) 사이에 Lua 소스를 직접 인라인하는 새로운 지시문 header_filter_by_lua_block 을 사용하는 것이 좋습니다 {}
. 이를 통해 특수 문자를 이스케이프 처리 할 필요는 없습니다.
header_filter_by_lua_block {
ngx.header["server"] = nil
}
https://github.com/openresty/lua-nginx-module#header_filter_by_lua_block
가장 먼저 : 왜 추가 모듈을 Headers More Nginx로 사용합니까? 서버 헤더 만 숨 깁니다. 몇 줄이면 간단한 패치가 동일한 솔루션에 도달 할 수 있습니다.
추가 모듈을 사용하면 불안정성 (환경 테스트가 잘 되었습니까? 다른 모듈 등)이 불안정하거나 불안정 할 수 있습니다 (이 모듈은 버그 및 / 또는 보안 관련 수정 사항으로 정기적으로 업데이트됩니까?).
둘째로. 이 스레드는 Nginx 코드를 조정하여 서버 헤더를 변경하는 방법을 응답 279389로 설명합니다. 문제는 그들이 HTTP / 2를 잊었다는 것입니다. 요컨대, 아무것도 변하지 않을 것입니다. 서버 헤더는 여전히 보입니다.
더 적은 것이 좋습니다. 좋아, 나는 또한 좋은 해결책을 오랫동안 찾고 있었다. 그러나 마침내 발견 :
나는 그 성가신 Nginx 서버 헤더에서 마침내 사용되었습니다.
nginx 소스 코드 폴더에서이 bash 기능을 실행하십시오. src /가 아닌 nginx- $ version에서.
hidengxver () {
read -r -p "Your own http_server_string for safety: " http_server_string
first_string="static char ngx_http_server_string\[\] = \"Server: nginx\" CRLF;"
second_string="static char ngx_http_server_string\[\] = \"$http_server_string\" CRLF;"
sed -ire "s/$first_string/$second_string/g" src/http/ngx_http_header_filter_module.c
read -r -p "Your own NGINX_VER const: " nginx_ver
third_string="\#define NGINX\_VER \"nginx\/\" NGINX\_VERSION"
forth_string="\#define NGINX\_VER \"$nginx_ver\" NGINX\_VERSION"
sed -ire "s/$third_string/$forth_string/g" src/core/nginx.h
real_nginx_version=$( grep '#define NGINX_VERSION' src/core/nginx.h | gawk -F'"' '{print $2}' )
read -r -p "Your own NGINX_VERSION const: " new_nginx_version
fifth_string="\#define NGINX\_VERSION \"$real_nginx_version\""
sixth_string="\#define NGINX\_VERSION \"$new_nginx_version\""
sed -ire "s/$fifth_string/$sixth_string/g" src/core/nginx.h
}