一、Nginx服务优化
1.1 隐藏版本号
为了防止攻击者根据已知服务的版本的漏洞进行攻击,有两种方式可以隐藏版本号:
1.1.1 直接修改主配置文件
在nginx的主配置文件中的http区域中添加“server_tokens off”文本,以后的访问即可隐藏版本号。
1.1.2 修改源代码
若nginx使用的是源代码安装,则可以直接修改源代码文件“/nginx源代码包目录/src/core/nginx.h”文件。
1.2 修改用户和组
Nginx运行时进程需要有用户与组的支持,用以实现对网站文件读取时进行访问控制。主进程由root创建,子进程由指定的用户与组创建。
修改用户和组的方法也有两种,一是适用源代码安装的nginx,在配置时指定用户和组;二是修改nginx的主配置文件,找到里面的“user”字符,在后面指定用户和组。
1.3 配置网页缓存时间
通过设置缓存时间,可以加快访问速度,避免重复的请求,一般缓存的都是静态网页。配置方法是在nginx的主配置文件,找到location,在里面添加"expires"字符并设置缓存时间(s秒、m分钟、h小时、d天、w日期、M月等)。
配置完成后,客户端在访问是,服务器就可以缓存请求的文件指定的时间,可以查看浏览器中开发工具中显示的响应报文的Expires和Data字段或Cache-Control字段,查看缓存时间。
1.4 日志切割
nginx没有自带的日志分割工具,可以适用第三方日志分割工具或自定义脚本。下面以自定义脚本为例,大致的逻辑为:
①重命名当前日志文件,最好将当前日期加入到日志文件名中。
②重载nginx服务,nginx为自动生成新的日志文件。
③使用计划任务实现自动化。
例如
1.5 设置连接超时
为了避免同一个用户长时间占用连接,需要设置定时断开连接。具体的配置在nginx的主配置文件中,找到“keepalive_timeout”字符,可以同时设置服务器超时断连时间和客户端的超时断连时间,以空格分隔,客户端的超时断连设置只会在一部分浏览器中生效。
配置完成后重载nginx服务,在浏览器中访问时,就可以看到开发工具中的响应报文中有Keep-Alive字段,此字段只显示客户端超时断连的值。
二、Nginx深入优化
2.1 配置网页压缩
nginx的ngx_http_gzip_modulle模块提供了压缩功能,默认会加载该模块,但并不启用功能。在配置文件中找到"gzip"字符,将它的注释去掉即可启用该功能。还有其他更精细的配置:
gzip_min_length | 用于设置允许压缩的页面的最小字节数 |
gzip_buffers n mK | 表示申请n个单位为mK的内存作为压缩结果流缓存,默认值是申请与原数据大小相同的内存空间来存储gzip压缩结果。 |
gzip_http_version | 用于设置识别http协议版本,默认是1.1。 |
gzip_comp_level | 用来指定gzip压缩比,1最小,9最大。 |
gzip_types text/plain | 压缩类型,是对哪些网页文档启用压缩功能。 |
gzip_vary | 可以让前端的缓存服务器缓存经过压缩的页面,设置为"on"是开启。 |
配置完成后重载nginx服务,在浏览器中访问时,就可以看到开发工具中的响应报文中有“Content-Encoding”字段,此字段会显示gzip。
2.2 更改进程数
在高并发环境中,需要启动更多的Nginx进程以保证快速响应,用以处理用户的请求避免造成阻塞。可以通过修改nginx的主配置文件中的"worker_processes"参数,来设置“worker processes”进程的数量,一般设为CPU的个数或者核数。同时“worket_connections”参数可以设置一个“worker processes”能够处理的并发连接的数量。
默认情况下,Nginx的多个进程可能更多的跑在一颗CPU上。为了充分利用硬件多核多CPU,可以分配不同的进程给不同的CPU处理。在一台4核CPU服务器上,可以设置每个进程分别由不同的CPU核心处理,达到CPU的性能最大化。
2.3 配置防盗链
为了防止服务器的静态资源被其他的网站通过链接的形式调用,需要防盗链这种技术。通过在nginx的主配置文件中的不同站点区域中添加对应的防盗链规则,可以指定对特定资源的请求设置规则防止别的网站盗用此类资源,比如图片、视频等。
其中的invalid_referer为nginx自带变量。