阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx版本号修改隐藏及记录用户请求需要的时间

220次阅读
没有评论

共计 4689 个字符,预计需要花费 12 分钟才能阅读完成。

原因:

目前选择用 nginx 的越来越多了,无论其 web 处理,反代,负载方面均展现独特的魅力,但是往往很多人喜欢直接用基本的参数实现 Nginx 功能。这其中还要注意一些细节。

话不多说,切入正题,今天讨论两个问题

1、nginx 版本号修改和隐藏

好处:加强安全,防止一些人找到指定版本漏洞进行攻击。

2、记录每个 request 花费时间:

更详细知道请求需要的时间。

1、nginx 版本号修改和隐藏

1、1)nginx 版本号修改

查看当前 Nginx 版本号和编译信息

[root@nginx sbin]# /usr/local/nginx/sbin/nginx  -V

nginx version: nginx/1.9.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: –user=nginx –group=nginx –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_realip_module

[root@nginx sbin]#

上面可以看到,Nginx 版本是 1.9.2,下面还有编译 Nginx 的一些参数。

那么风险就来了:

1)当后端程序停止,或者压力测试等情况,Nginx 的版本号会很快速的暴露。

2)curl 或者一些工具很轻松获取你的 Nginx 版本信息

3)再或者说,你根本不想人家知道你用的 Nginx 等

处理方式:

编辑 nginx 源码中的 src/core/nginx.h 头文件

Nginx 版本号修改隐藏及记录用户请求需要的时间

修改为(自己可任意修改)

Nginx 版本号修改隐藏及记录用户请求需要的时间

需要重新编译安装(线上业务注意不要乱搞,除非自己很熟练,可以做到平滑修改)

[root@nginx nginx-1.9.2]# /usr/local/nginx/sbin/nginx -V

nginx version: IIS/IIS

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: –user=nginx –group=nginx –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_realip_module

[root@nginx nginx-1.9.2]#

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

[root@nginx conf]# curl -I 192.168.1.223

HTTP/1.1 200 OK

Server: IIS/IIS

Date: Fri, 25 Mar 2016 21:31:38 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Thu, 24 Mar 2016 21:38:26 GMT

Connection: keep-alive

ETag: “56f45e52-264”

Accept-Ranges: bytes

[root@nginx conf]#

1.2)Nginx 版本号隐藏

nginx 的 HttpCoreModule 提供了一条叫做 server_tokens 指令,我这要将这条指令设置为“server_tokens off”就可以了。

1、修改 nginx.conf

http 区段中插入 server_tokens  off;

#2、编辑 php-fpm 配置文件,如 fastcgi.conf(更深入的话,当然也可以不做这一步)

找到:

fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;

改为:

fastcgi_param SERVER_SOFTWARE nginx;

3、重启或者 reloadNginx 即可。

2、记录访问日志中每个请求的时间

[root@nginx ~]# tail -f /usr/local/nginx/logs/access.log

192.168.1.243 – -[26/Mar/2016:05:08:23 +0800] “GET /test HTTP/1.1″ 302 160″-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” “-“

192.168.1.243 – -[26/Mar/2016:05:08:34 +0800] “GET / HTTP/1.1″ 304 0″-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” “-“

192.168.1.243 – -[26/Mar/2016:05:08:41 +0800] “GET /index.php HTTP/1.1″ 302 160″-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” “-“

Nginx 版本号修改隐藏及记录用户请求需要的时间

查看 Nginx 日志相关访问记录:(默认格式)

log_format access ‘$remote_addr – $remote_user[$time_local] “$request” ‘

                        ‘$status $body_bytes_sent”$http_referer” ‘

                        ‘”$http_user_agent” “$http_x_forwarded_for” ‘;

access_log logs/access.log access;

修改为:

log_format access ‘$remote_addr – $remote_user [$time_local] ‘ ‘”$request” $status $body_bytes_sent ‘

‘”$http_referer” “$http_user_agent”‘ ‘ elapsed=${request_time}s’;(注意 Apache 此参数是 us)

access_log logs/access.log access;

检测 Nginx 配置文件,并重新启动服务(重装也可以)

[root@nginx ~]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@nginx ~]# /etc/init.d/nginx reload

[root@nginx ~]#

[root@nginx logs]# tail -f access.log

192.168.1.243 – – [22/Nov/2016:10:45:52 +0800] “GET / HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” elapsed=0.000s

192.168.1.243 – – [22/Nov/2016:10:45:52 +0800] “GET / HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” elapsed=0.000s

192.168.1.243 – – [22/Nov/2016:10:45:54 +0800] “GET / HTTP/1.1” 304 0 “-” “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36” elapsed=0.000s

Nginx 版本号修改隐藏及记录用户请求需要的时间

日志相关参数官网给的解释是:Module ngx_http_log_module

$remote_addr, $http_x_forwarded_for 记录客户端 IP

$remote_user 记录客户端用户名称

$time_local 通用日志格式下的本地时间

$request 记录请求的 URL 和 HTTP Protocol

$status 记录请求状态

$body_bytes_sent 发送给客户端的 Bytes,不包括 Header 的大小;该变数与 Apache mod_log_config 的 “%B” 相容

$bytes_sent 发送给客户端的 总 Bytes 数

$connection 连接的序列号

$connection_requests 当前通过一个连接获得的请求数量

$msec 日志写入时间。单位为秒,精度是毫秒

$pipe 如果请求是通过 HTTP 流水线 (pipelined) 发送,pipe 值为 ”p”,否则为 ”.”

$http_referer 记录从哪个页面链接访问过来的

$http_user_agent 记录客户端浏览器相关信息

$request_length 请求的长度(包括请求行,请求头和请求正文)

$request_time 请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个位元组开始,直到把最后一个字元发送给客户端后进行日志写入为止

$time_iso8601 ISO8601 标准格式下的本地时间

Nginx 对./connfigue 支持的参数(可 –help 查看)

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

Nginx 版本号修改隐藏及记录用户请求需要的时间

查看 Nginx 安装了那些模块

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@nginx ~]# /etc/init.d/nginx reload

[root@nginx ~]#

[root@nginx ~]# /usr/local/nginx/sbin/nginx -V

nginx version: IIS/IIS

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: –user=nginx –group=nginx –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_realip_module

[root@nginx ~]#

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/141044.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4689字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中