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

目录

[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 个连接。
    • 优化缓冲区
      • 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 可以对发送给客户端的响应数据进行压缩,减少网络传输的数据量,从而加快页面加载速度。例如:
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 攻击等)、资源盗用等,确保网站数据的完整性、保密性和可用性。
  • 原理与方法
    • 访问控制
      • allowdeny 指令:通过这两个指令可以设置允许或拒绝特定 IP 地址或 IP 地址段访问服务器。例如,只允许公司内部的 IP 地址段192.168.1.0/24访问网站,配置如下:
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.comsub.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,拒绝包含';等危险字符的请求。
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 攻击的防护。经过安全配置后,网站遭受外部非法访问和攻击的风险显著降低。

相关推荐
xujiangyan_8 小时前
nginx的反向代理和负载均衡
服务器·网络·nginx
Linux运维老纪10 小时前
运维之 Centos7 防火墙(CentOS 7 Firewall for Operations and Maintenance)
linux·安全·centos·云计算·运维开发·火绒
viqecel1 天前
网站改版html页面 NGINX 借用伪静态和PHP脚本 实现301重定向跳转
nginx·php·nginx重定向·301重定向·html页面重定向
硪就是硪1 天前
内网环境将nginx的http改完https访问
nginx·http·https
ak啊1 天前
Nginx 安全加固详细配置指南
nginx
沐土Arvin2 天前
Nginx 核心配置详解与性能优化最佳实践
运维·开发语言·前端·nginx·性能优化
haoranyyy2 天前
mac环境中Nginx安装使用 反向代理
linux·服务器·nginx
ak啊2 天前
Nginx 高级缓存配置与优化
nginx
再学一丢丢2 天前
Keepalived+LVS+nginx高可用架构
nginx·架构·lvs
xujiangyan_2 天前
nginx的自动跳转https
服务器·nginx·https