文章目录
- 隐藏版本号
- 修改用户与组
- 缓存时间设置
- 日志切割
- 日志切割脚本
- 连接超时设置
- 更改进程数
-
- [优化进程数与 CPU 亲和性](#优化进程数与 CPU 亲和性)
- 配置网页压缩
-
- [启用 Gzip 压缩](#启用 Gzip 压缩)
- 配置防盗链
- 总结
隐藏版本号
隐藏nginx版本号可以防止攻击者利用特定版本的已知漏洞进行攻击
查看当前版本号
可使用 Fiddler 工具抓包查看 Nginx 版本,或在 CentOS 中使用以下命令查看响应报文首部信息:


方法一:修改配置文件
编辑nginx配置文件

在 http 块中添加以下配置:


重启 Nginx 服务并验证:


方法二:修改源码并重编译
修改 Nginx 源码文件

更改以下定义


重新配置并编译

手动替换二进制文件


编辑配置文件,将 server_tokens 设置为 on,并重启服务


修改用户与组
最小权限原则:以非root用户运行Nginx,降低被攻击后的影响范围
隔离风险:防止Nginx进程被入侵后获得root权限
文件访问控制:确保Web目录权限与Nginx运行用户匹配,避免权限问题
配置用户与组
编辑 Nginx 配置文件,修改用户和组为 nginx

重启服务并验证进程所属用户

应显示主进程由 root 创建,子进程由 nginx 创建

缓存时间设置
提升性能:减少客户端重复请求静态资源(如图片、CSS/JS)
降低服务器负载:通过浏览器缓存减少带宽消耗和服务器压力
优化用户体验:加速页面加载速度(特别是重复访问时)
配置缓存时间
当Nginx将网页数据返回给客户端后,可设置缓存时间,以方便在日后进行相同内容的请求时直接返回,避免重复请求,加快了访问速度。一般针对静态网页设置,对动态网页不设置缓存时间

Nginx服务器处理请求并配置缓存的完整流程。核心流程和关键配置如下
1、用户请求:浏览器发起对图片资源(如JPG/PNG)的HTTP请求。
2、Nginx接收请求:通过80端口监听请求,匹配配置中的location规则(例如正则表达式location ~ .(jpg|png))。
3、资源处理:Nginx根据root配置找到磁盘上的文件,并读取数据。
4、响应与缓存控制:
1.1 返回资源时,Nginx 根据 expires 1d的配置,在响应头中设置 Cache-Control: max-age=86400和 Expires字段,从而强制浏览器缓存资源1天。
1.2 浏览器接收后会将资源存入本地缓存,并在后续请求中优先使用缓存(避免重复请求)。
5、客户端行为:浏览器遵循缓存策略,在有效期内(86400秒)直接使用本地缓存,提升页面加载效率。
为静态资源设置缓存时间,提升静态资源访问效率并降低服务器负载。在 server 块中添加以下 location 配置:

重启服务并访问测试:

1 打开浏览器(推荐使用Chrome),按下F12键
2 切换到Network(网络)选项卡
3 访问URL:http://192.168.10.110/game.jpg
4 在响应列表中找到200状态码的请求,双击查看详情
5 在响应头中确认存在Cache-Control:max-age=86400字段
该设置表示资源缓存有效期为86400秒(24小时)。在此期间,浏览器会直接使用本地缓存数据,无需向Nginx服务器重复请求,有效降低服务器带宽消耗。

日志切割
优化日志分割策略,便于日常分析和文件大小管理,防止日志文件过大。
日志切割脚本
创建日志切割脚本 /opt/fenge.sh,内容如下

添加执行权限并设置定时任务



连接超时设置
HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自同一客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能
配置连接超时参数
释放资源:关闭闲置连接,避免占用过多的文件描述符和内存
防止DoS攻击:限制恶意客户端保持长连接消耗服务器资源
平衡性能与可靠性:
短超时:快速释放资源,但可能影响高延迟网络用户
长超时:提升用户体验,但增加服务器负担
在 http 块中设置以下参数,优化连接管理


参数说明:
keepalive_timeout:指定 TCP 连接保持时间。
Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
client_header_timeout:客户端发送完整请求头的超时时间,超时返回 408(Request Timed Out)。
client_body_timeout:客户端发送请求体的超时时间,超时返回 408。
重启 Nginx 使配置生效:

更改进程数
在高并发场景,需要启动更多的Nginx进程以保证快速响应,以处理用户的请求,避免造成阻塞
优化进程数与 CPU 亲和性
查看 CPU 核数并调整 Nginx 工作进程数:


编辑配置文件,设置工作进程数和 CPU 亲和性:


最优雅和自动化的方式是直接使用 auto 参数,Nginx 会自动检测并设置为逻辑核心数


重启 Nginx 服务

使用场景:
1、高并发
2、CPU压力不均衡的时候
配置网页压缩
Nginx的ngx_http_gzip_module模块提供了内容压缩功能。
该模块默认已安装,能够在向客户端发送数据前对输出内容进行压缩,有效节省带宽并提升用户体验。
可以通过修改配置文件中的相关参数来优化压缩性能
启用 Gzip 压缩
在 http 块中启用压缩功能,优化传输效率:

在 HTML 中引用图片资源,重启 Nginx 后通过浏览器验证响应头是否包含 Content-Encoding: gzip

重启nginx服务

1 . 打开浏览器(推荐使用Chrome),按下F12键
2 . 切换到Network(网络)选项卡
3 . 访问URL:http://192.168.10.110
4 . 在响应列表中找到200状态码的请求,双击查看详情
5 . 在响应头中确认存在Content-Encoding: gzip字段

配置防盗链
Nginx 源主机:192.168.10.131:80 域名(www.yjs.com)
盗链网站主机:192.168.10.128:80 域(www.simoncwh.com)
防盗链配置设置
在 Nginx 源主机nginx.conf中的server 块中添加以下 location 配置,防止非法网站盗用资源

参数说明:
1 . ~* .(jpg|gif|swf)$:匹配不区分大小写,以.jpg、.gif或.swf结尾的文件
2 . valid_referers:配置可信来源网站,允许其正常访问图片资源
3 .访问控制规则:
none:允许不带Referer字段的请求(如直接在地址栏输入
URL,这种请求是不会包含 Referer 字段的)
blocked:允许非http://开头的,不带协议的请求访问资源
*.yjs.com:仅允许来自该域及其子域的请求
访问示例:通过http://www.yjs.com访问game.jpg时,请求被视为来自http://www.yjs.com
判断逻辑(if):当请求来源不在valid_referers列表中时,$invalid_referer为true,将执行重定向或返回403禁止访问
测试准备
在 Web 源主机和盗链网站主机分别配置 hosts 和 HTML 页面,测试防盗链是否生效。
网页准备:
Web源主机(192.168.10.110)配置:

盗链网站主机(192.168.10.128)

在盗图网站主机上进行浏览器验证
防盗链验证
不设置防盗链时访问http://www.simoncwh.com
设置防盗链时访问http://www.simoncwh.com

完整流程
1 . 完整解析
在浏览器中访问 http://www.simoncwh.com。
客户端检查 /etc/hosts 文件,发现 www.simoncwh.com 映射到 192.168.10.128。
浏览器向 192.168.10.128 发送 HTTP 请求获取 index.html。
2 . 获取 HTML 内容
192.168.10.123 的 Nginx 服务器返回 index.html 内容。
HTML 内容如下:

3 .加载图片资源
浏览器解析 HTML 后,发现需要加载图片 http://www.yjs.com/game.jpg。
客户端再次检查 /etc/hosts 文件,发现 www.yjs.com 映射到 192.168.10.131。
浏览器向 192.168.10.131 发送请求获取 game.jpg,并在请求头中设置 Referer 为 http://www.simoncwh.com/(因为图片是从 www.simoncwh.com 页面引用的)。
4 .防盗链检查
请求到达 192.168.10.110 的 Nginx 服务器。
Nginx 匹配防盗链规则 location ~* .(jpg|gif|swf)$,因为请求的是 game.jpg。
Nginx 检查 Referer 头(值为 http://www.simoncwh.com/)是否在 valid_referers 列表中(none blocked *.yjs.com yjs.com)。
Referer 来自 www.simoncwh.com,不在允许列表中,因此 $invalid_referer 变量值为 1,触发防盗链操作。
Nginx 执行 rewrite ^/ http://www.yjs.com/error.png;,这返回一个 302 重定向响应, Response Header 中的 Location 头为 http://www.yjs.com/error.png。
5 .重定向处理:
浏览器收到 302 重定向响应,URLhttp://www.yjs.com/error.png 发送请求。
浏览器在这次请求中可能还会设置 Referer 头为 http://www.simoncwh.com/(因为重定向发生在同源环境下,浏览器通常保留原始 Referer)。
6 .获取 error.png:
请求 error.png 到达 192.168.10.110 的 Nginx 服务器。
防盗链规则只针对 .jpg、.gif 和 .swf 文件,因此 error.png 不匹配防盗链 location 块。
Nginx 直接返回 error.png 图片内容(假设该文件存在于服务器上)。
7 .最终显示
浏览器接收到 error.png 图片,并显示在 www.simoncwh.com 的页面上,代替原本的 game.jpg。
用户看到的是错误图片(error.png),而不是预期的game.jpg。
总结
通过以上几个方面的配置优化,不仅可以提升 Nginx 服务器的处理能力和响应速度,还能有效加强服务的安全性。
在实际生产环境中,应根据具体业务需求和服务器资源情况灵活调整各项参数。定期审查和更新配置,结合监控日志,可确保服务持续稳定运行。
建议在修改配置前备份原文件,并在测试环境验证无误后再部署至生产环境。