Nginx系列07(Nginx 性能优化、Nginx 安全配置)

ops/2025/3/6 2:10:55/

目录

Nginx 性能优化

Nginx 安全配置


Nginx 性能优化

  • 概念:Nginx 性能优化旨在通过调整各种配置参数和采用特定技术,提升 Nginx 服务器处理请求的能力,降低响应时间,增加并发连接数,从而更高效地为用户提供服务,减少资源消耗。
  • 原理与方法
    • 调整工作进程相关参数
      • worker_processes:该参数决定 Nginx 启动的工作进程数量。通常设置为与服务器 CPU 核心数相同或根据实际负载情况适当调整。例如,若服务器有 4 个 CPU 核心,设置worker_processes 4; ,让每个核心都能充分利用来处理请求,避免资源闲置。
      • worker_connections:它定义了每个工作进程能够处理的最大并发连接数。结合worker_processes,可以大致估算出 Nginx 服务器能处理的总并发连接数(理论上为worker_processes * worker_connections)。如设置worker_connections 1024;,表示每个工作进程最多可同时处理 1024 个连接。
    • 优化缓冲区
      • client_body_buffer_size:用于设置客户端请求体的缓冲区大小。当客户端上传数据时,Nginx 会将数据先存储在这个缓冲区中。如果请求体较大,适当增大此缓冲区可以减少磁盘 I/O 操作。例如,对于一般的 Web 应用,可设置为client_body_buffer_size 8k; 。
      • proxy_buffer_sizeproxy_buffersproxy_busy_buffers_size:这些参数用于优化反向代理时的缓冲区设置。proxy_buffer_size设置用于读取后端服务器响应头的缓冲区大小;proxy_buffers设置用于读取后端服务器响应体的缓冲区数量和大小;proxy_busy_buffers_size设置繁忙缓冲区的大小。合理配置这些参数可以提升反向代理时的数据传输效率。如proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; 。
    • 启用 gzip 压缩:通过开启 gzip 模块,Nginx 可以对发送给客户端的响应数据进行压缩,减少网络传输的数据量,从而加快页面加载速度。例如:
http {gzip on;gzip_min_length 1024;gzip_proxied any;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

上述配置中,gzip on;开启 gzip 压缩功能;gzip_min_length 1024;表示当响应数据长度大于 1024 字节时才进行压缩;gzip_proxied any;表示对所有代理请求都进行压缩;gzip_types指定了哪些类型的文件需要进行压缩,如文本、CSS、JSON、JavaScript 等常见的 Web 文件类型。

  • 缓存优化:如前面提到的代理缓存和 FastCGI 缓存,合理配置缓存可以减少对后端服务器的请求,提高响应速度。例如,设置代理缓存时,精确设置缓存键和缓存时间,让经常访问且内容变化不大的页面或数据能长时间缓存。
  • 场景示例:假设有一个高并发的 Web 应用,运行在一台具有 8 个 CPU 核心、16GB 内存的服务器上。为了优化 Nginx 性能,进行如下配置:
worker_processes 8;
events {worker_connections 2048;
}
http {client_body_buffer_size 16k;proxy_buffer_size 8k;proxy_buffers 4 16k;proxy_busy_buffers_size 32k;gzip on;gzip_min_length 1024;gzip_proxied any;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 其他http相关配置
}

在这个场景中,worker_processes设置为 8,充分利用服务器的 8 个 CPU 核心;worker_connections设置为 2048,理论上总共可处理8 * 2048 = 16384个并发连接。同时,调整了缓冲区大小,并开启了 gzip 压缩,以提高数据处理和传输效率。通过 ab(Apache Bench)工具测试优化前后的性能,发现优化后网站的平均响应时间明显缩短,并发处理能力显著提升。

Nginx 安全配置

  • 概念:Nginx 安全配置是为了保护服务器免受各种安全威胁,如非法访问、恶意攻击(如 SQL 注入、XSS 攻击等)、资源盗用等,确保网站数据的完整性、保密性和可用性。
  • 原理与方法
    • 访问控制
      • allowdeny指令:通过这两个指令可以设置允许或拒绝特定 IP 地址或 IP 地址段访问服务器。例如,只允许公司内部的 IP 地址段192.168.1.0/24访问网站,配置如下:
http {server {location / {deny all;allow 192.168.1.0/24;}}
}

上述配置中,deny all;先拒绝所有 IP 访问,然后allow 192.168.1.0/24;允许指定的 IP 地址段访问。

  • 防盗链:使用valid_referers指令防止网站资源被其他网站盗用。例如,只允许来自example.comsub.example.com的请求访问网站的图片资源,配置如下:
http {server {location ~ \.(jpg|jpeg|png|gif)$ {valid_referers none blocked example.com sub.example.com;if ($invalid_referer) {return 403;}}}
}

这里valid_referers指定了合法的来源,none表示没有 Referer 头的请求,blocked表示 Referer 头被防火墙或代理服务器删除的请求。如果$invalid_referer变量为真(即请求来源不合法),则返回 403 禁止访问错误。

  • 防止常见攻击
    • 防止 SQL 注入:虽然 Nginx 本身不直接执行 SQL 语句,但可以通过配置限制一些可能导致 SQL 注入的特殊字符和请求。例如,通过正则表达式匹配请求 URL,拒绝包含';等危险字符的请求。
http {server {location / {if ($request_uri ~* [';"]){return 403;}}}
}
  • 防止 XSS 攻击:可以通过设置 HTTP 头信息来增强安全性。例如,设置Content - Security - Policy头,限制页面可以加载的资源来源,防止恶意脚本注入。
http {add_header Content - Security - Policy "default - src'self'";
}

上述配置表示页面只能加载来自本站('self')的资源。

  • 场景示例:对于一个在线商城网站,为了防止竞争对手恶意抓取商品图片,同时保护网站免受外部非法访问和常见攻击,进行如下安全配置:
http {server {# 访问控制location / {deny all;allow 192.168.1.0/24; # 假设公司内部IP地址段allow 10.0.0.0/8; # 假设部分可信IP地址段}# 防盗链location ~ \.(jpg|jpeg|png|gif)$ {valid_referers none blocked example.com sub.example.com;if ($invalid_referer) {return 403;}}# 防止SQL注入location / {if ($request_uri ~* [';"]){return 403;}}# 设置安全头信息add_header Content - Security - Policy "default - src'self'";}
}

在这个场景中,通过访问控制限制了可访问网站的 IP 范围;通过防盗链设置保护了商品图片资源;通过对请求 URL 的检查防止 SQL 注入;通过设置安全头信息增强了对 XSS 攻击的防护。经过安全配置后,网站遭受外部非法访问和攻击的风险显著降低。


http://www.ppmy.cn/ops/163466.html

相关文章

【金融量化】Ptrade中如何获取各类回测数据?

1. get_history 功能: 获取指定时间段内的历史行情K线数据,支持多股票、多行情字段获取。参数: security: 股票代码或股票代码列表(list[str]/str)。start_date: 开始时间,格式为YYYYmmdd、YYYY-mm-dd、YYYY-mm-dd HH:MM、YYYYmm…

局域网自动识别机器名和MAC并生成文件的命令

更新版本:添加了MAC 地址 确定了设备唯一性 V1.1 局域网自动识别机器名和MAC并生成文件的批处理命令 echo off setlocal enabledelayedexpansionREM 设置输出文件 set outputFilenetwork_info.txtREM 清空或创建输出文件 echo Scanning network from 192.168.20.1…

Ubuntu: 域名解析错误:Temporary failure in name resolution

临时解决方案 你可以尝试直接指定一个公共 DNS 服务器来进行测试,比如 Google 的公共 DNS 或 Cloudflare 的 DNS。在命令行中可以这样操作: 使用 Google 的公共 DNS: sudo systemd-resolve --set-dns8.8.8.8 --interface* --set-domain~. su…

Ubuntu20.04双系统安装及软件安装(七):Anaconda3

Ubuntu20.04双系统安装及软件安装(七):Anaconda3 打开Anaconda官网,在右侧处填写邮箱(要真实有效!),然后Submit。会出现如图示的Success界面。 进入填写的邮箱,有一封Ana…

【我的Android进阶之旅】如何使用NanoHttpd在Android端快速部署一个HTTP服务器?

文章目录 开篇:程序员的"摸鱼神器"?一、为什么选择NanoHttpd?二、五分钟极速上车指南2.1 ▶ 第一步:引入依赖的哲学2.2 ▶ 第二步:创建服务器类:继承大法好2.3 ▶ 第三步:启动服务的仪式感三、高级玩法:让服务器不再单调3.1 🔥 场景1:变身文件服务器3.2 �…

【JAVA】ThreadPoolTaskExecutor 线程池学习、后端异步、高并发处理

ThreadPoolTaskExecutor 是 Spring 框架提供的一个线程池实现类,基于 Java 原生的 ThreadPoolExecutor 进行了封装和扩展,支持更灵活的配置,并与 Spring 的依赖注入、生命周期管理等功能无缝集成。它常用于异步任务处理、定时任务调度和高并发…

从 Milvus 中导出数据到 JSON 文件的实践

1 引言 在数据管理和处理的过程中,我们常常需要将存储在向量数据库(如 Milvus)中的数据导出到其他格式,以便进行进一步的分析、处理或迁移。本文将详细介绍如何使用 Python 代码从 Milvus 数据库中导出数据,并将其保存为 JSON 文件。 2 代码解析 2.1 导入必要的库 imp…

RocketMQ顺序消费机制

RocketMQ的顺序消费机制通过生产端和消费端的协同设计实现,其核心在于局部顺序性,即保证同一队列(MessageQueue)内的消息严格按发送顺序消费。以下是详细机制解析及关键源码实现: 一、顺序消费的核心机制 1. 生产端路…