目录
[Nginx 性能优化](#Nginx 性能优化)
[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 个连接。
- worker_processes :该参数决定 Nginx 启动的工作进程数量。通常设置为与服务器 CPU 核心数相同或根据实际负载情况适当调整。例如,若服务器有 4 个 CPU 核心,设置
- 优化缓冲区 :
- client_body_buffer_size :用于设置客户端请求体的缓冲区大小。当客户端上传数据时,Nginx 会将数据先存储在这个缓冲区中。如果请求体较大,适当增大此缓冲区可以减少磁盘 I/O 操作。例如,对于一般的 Web 应用,可设置为
client_body_buffer_size 8k;
。 - proxy_buffer_size 、proxy_buffers 、proxy_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;
。
- client_body_buffer_size :用于设置客户端请求体的缓冲区大小。当客户端上传数据时,Nginx 会将数据先存储在这个缓冲区中。如果请求体较大,适当增大此缓冲区可以减少磁盘 I/O 操作。例如,对于一般的 Web 应用,可设置为
- 启用 gzip 压缩:通过开启 gzip 模块,Nginx 可以对发送给客户端的响应数据进行压缩,减少网络传输的数据量,从而加快页面加载速度。例如:
- 调整工作进程相关参数 :
bash
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 性能,进行如下配置:
bash
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 攻击等)、资源盗用等,确保网站数据的完整性、保密性和可用性。
- 原理与方法 :
- 访问控制 :
- allow 和deny 指令:通过这两个指令可以设置允许或拒绝特定 IP 地址或 IP 地址段访问服务器。例如,只允许公司内部的 IP 地址段
192.168.1.0/24
访问网站,配置如下:
- allow 和deny 指令:通过这两个指令可以设置允许或拒绝特定 IP 地址或 IP 地址段访问服务器。例如,只允许公司内部的 IP 地址段
- 访问控制 :
bash
http {
server {
location / {
deny all;
allow 192.168.1.0/24;
}
}
}
上述配置中,deny all;
先拒绝所有 IP 访问,然后allow 192.168.1.0/24;
允许指定的 IP 地址段访问。
- 防盗链 :使用
valid_referers
指令防止网站资源被其他网站盗用。例如,只允许来自example.com
和sub.example.com
的请求访问网站的图片资源,配置如下:
bash
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,拒绝包含
'
、;
等危险字符的请求。
- 防止 SQL 注入 :虽然 Nginx 本身不直接执行 SQL 语句,但可以通过配置限制一些可能导致 SQL 注入的特殊字符和请求。例如,通过正则表达式匹配请求 URL,拒绝包含
bash
http {
server {
location / {
if ($request_uri ~* [';"]){
return 403;
}
}
}
}
- 防止 XSS 攻击 :可以通过设置 HTTP 头信息来增强安全性。例如,设置
Content - Security - Policy
头,限制页面可以加载的资源来源,防止恶意脚本注入。
bash
http {
add_header Content - Security - Policy "default - src'self'";
}
上述配置表示页面只能加载来自本站('self'
)的资源。
- 场景示例:对于一个在线商城网站,为了防止竞争对手恶意抓取商品图片,同时保护网站免受外部非法访问和常见攻击,进行如下安全配置:
bash
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 攻击的防护。经过安全配置后,网站遭受外部非法访问和攻击的风险显著降低。