一、隐藏nginx header内版本号信息
由于一些特定的系统及服务漏洞一般都和特定的软件及版本号有关,我们应尽量隐藏服务器的敏感信息(软件名称及版本等信息),在一定程度确保web服务器的安全
1、利用curl查看隐藏前header内的web版本信息
[root@node1 ~]# curl -I http://10.100.100.111
HTTP/1.1 200 OK
# Server: nginx/1.10.2
Date: Wed, 06 Dec 2017 20:56:43 GMT
Content-Type: text/html
Content-Length: 3698
Last-Modified: Mon, 31 Oct 2016 12:37:31 GMT
Connection: keep-alive
ETag: "58173b0b-e72"
Accept-Ranges: bytes
2、隐藏版本号
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off; (添加这个即可)
3、测试
[root@node1 ~]# service nginx reload
Reloading nginx: [ OK ]
[root@node1 ~]# curl -I http://10.100.100.111
HTTP/1.1 200 OK
Server: nginx
二、更改掉nginx的默认用户及用户组nobody
1、nginx服务启动,使用默认用户nobody
[root@node1 ~]# grep "user" /etc/nginx/nginx.conf.default
#user nobody; (默认为nobody)
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '"$http_user_agent" "$http_x_forwarded_for"';
2、更改配置文件/etc/nginx/nginx.conf
#user nobody更改为user nginx
或者在编译的时候指定 --user=nginx --group=nginx
3、查看
[root@node1 ~]# ps -ef|grep nginx
root 1442 1 0 04:56 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 1478 1442 0 05:02 ? 00:00:00 nginx: worker process
root 1485 1335 0 05:08 pts/0 00:00:00 grep nginx
三、配置nginx worker进程个数
worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)
新版本的nginx,worker_processes 都为auto咯
如果要设置,一般设置为服务器cpu核心数-1,假如8核CPU,那么设置
worker_processes 6
查看物理cpu的方法
[root@node1 ~]# grep "physical id" /proc/cpuinfo
physical id : 0
2、worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。
work_rlimit_nofile 65535;
文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。
* soft nofile 65535
* hard nofile 65535
用户重新登录生效(ulimit -n)
3、worker_connections 设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
4、multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。
四、根据CPU核数进行nginx进程优化
默认情况nginx的多个进程可能跑到一颗CPU上,我们要将不同的进程分配到不同的cpu上
假如四核的CPU
worker_cpu_affinity 0001 0010 0100 1000
假如八核CPU
worker_cpu_affinity 000000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
五、HTTP上下文配置优化
(1)、sendfile 指向 sendfile()函数。sendfile() 在磁盘和 TCP 端口(或者任意两个文件描述符)之间复制数据。不要在意这些细节,说了这么多,只是想说,开着就好。
(2)、tcp_nopush 配置 nginx 在一个包中发送全部的头文件,而不是一个一个发送。
(3)、tcp_nodelay 配置 nginx 不要缓存数据,应该快速的发送小数据——这仅仅应该用于频繁发送小的碎片信息而无需立刻获取响应的、需要实时传递数据的应用中。
(4)、keepalive_timeout 指定了与客户端的 keep-alive 链接的超时时间。服务器会在这个时间后关闭链接。我们可以降低这个值,以避免让 worker 过长时间的忙碌。(可以改的低点,比如15)
六、连接超时时间
主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的
1) keepalived_timeout客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接
keepalive_timeout 60;
2)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小
client_header_buffer_size 4k;
3)open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
4)client_header_timeout设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误
client_body_timeout设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示
5)send_timeout响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx关闭连接
6)client_max_body_size上传文件大小限制
7)open_file_cache max=102400 inactive=20s;
这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件
数一致,inactive 是指经过多长时间文件没被请求后删除缓存。
open_file_cache_valid 30s;
这个是指多长时间检查一次缓存的有效信息。
open_file_cache_min_uses 1;
open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文
件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。
- 第一部分:Nginx Web服务
- 第一章: Nginx的初探
- 第二章:Nginx的安装部署
- 第一节:在centos6上通过Yum安装Nginx
- 第二节:在Centos7上通过Yum安装nginx
- 第三节:编译安装Nginx服务
- 第四节: Nginx编译参数详解
- 第五节: Nginx的启动脚本
- 第六节:Nginx的shell脚本安装
- 第七节:nginx服务的平滑升级
- 第三章:Nginx服务基础配置
- 第一节: 配置运行nginx服务器用户
- 第二节:配置运行生成的worker processes进程数
- 第三节:配置Nginx进程PID存放路径
- 第四节:定义MIME类型
- 第五节:自定义nginx的访问日志
- 第六节:主配置段(main)常用的配置
- 第七节:http段(核心)常用的配置命令
- 第八节:配置nginx中的location段
- 第九节: 基于IP的访问控制
- 第十节:基于用户的访问控制
- 第十一节:Nginx定义status状态页
- 第十二节:Nginx服务器Rewrite重写
- 第十三节:Nginx服务配置防盗链
- 第十四节:nginx软件的优点
- 第四章:Nginx服务器的优化配置
- 第一节:nginx.conf配置文件基本参数优化
- 第二节:fastcgi调优
- 第三节:Gzip调优
- 第四节:expires缓存调优
- 第五节:内核参数优化
- 第六节: Nginx之——413 修改上传文件大小限制
- 第五章:Nginx虚拟主机的配置
- 第一节:基于名称的虚拟主机
- 第二节:通过shell脚本添加虚拟主机
- 第六章:Nginx常用模块指令详解
- 第一节:ngx_http_realip_module
- 第二节:http_image_filter_module
- 第三节:tengine中配置consistent hash module
- 第四节:ngx_http_userid_module
- 第七章:Nginx服务器配置HTTPS访问
- 第八章: Nginx服务器日志切割
- 第二部分:Nginx负载均衡反向代理服务
- 第一章:Nginx进阶参数详解
- 第一节:proxy_module参数详解
- 第二节:upstream_module参数详解
- 第四章:Nginx反向代理服务
- 第一节:Nginx反向代理配置参数详解
- 第二节:Nginx反向代理服务配置案例
- 第三节:Nginx缓存
- 第四节: Nginx中fastcgi模块
- 第五节:nginx+fastcgi实现动静分离架构
- 第五章:Nginx负载均衡
- 第一节:ngx_http_upstream_module常见指令
- 第二节:调度方法
- 第三节:健康状态检查