Nginx 隐藏服务器名称和版本号

来源:互联网 发布:react.js .百度百科 编辑:程序博客网 时间:2024/05/21 07:34

初学nginx,遇到了server_tokens命令,该命令的作用是显示或隐藏掉版本号。

例如server_tokens off; 隐藏版本号。浏览器访问时抓包,查看HTTP响应的Server头没有版本号。

既然版本号可以隐藏,那可不可以隐藏或修改nginx服务器的名称呢?答案是可以,修改或隐藏服务器名称需要修改源码nginx.h,nginx.h在src/core/目录下 。具体操作如下:

下面两个宏的值修改为自己设定的值,例如"NGX"。 都改为 "" 即隐藏名称。

#define NGINX_VER         "nginx/" NGINX_VERSION   改为 #define NGINX_VER          "NGX" NGINX_VERSION#define NGINX_VAR          "NGINX" 改为 #define NGINX_VAR          "NGX"

同理改版本号修改NGINX_VERSION的值

#define NGINX_VERSION      "1.8.0"

注意事项

1. 在配置文件nginx.conf中不要使用server_tokens  off命令, 因为如果设置了该命令,服务器名称就固定了。

如果配置了server_tokens off,在解析文件时 clcf->server_tokens值为0。见ngx_http_core_module.c 的server_token命令处理函数ngx_conf_set_flag_slot

if (ngx_strcasecmp(value[1].data, (u_char *) "on") == 0) {    *fp = 1;} else if (ngx_strcasecmp(value[1].data, (u_char *) "off") == 0) {    *fp = 0;}

而在ngx_http_header_filter_module.c中

static char ngx_http_server_string[] = "Server: nginx" CRLF;static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;if (clcf->server_tokens) {p = (u_char *) ngx_http_server_full_string;len = sizeof(ngx_http_server_full_string) - 1;} else {p = (u_char *) ngx_http_server_string;        len = sizeof(ngx_http_server_string) - 1;}

2. 程序重新编译完后,要reload不会生效,需要用kill命令杀死原来的进程,再重新启动,


0 0
原创粉丝点击