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 攻击的防护。经过安全配置后,网站遭受外部非法访问和攻击的风险显著降低。

相关推荐
神秘的土鸡5 小时前
Linux中WgCloud的服务器与客户端监控系统(完整部署教程)
linux·运维·nginx·adb·监控·自动化运维
weixin_425878236 小时前
Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构
nginx·架构·负载均衡
Jerry.张蒙7 小时前
人工智能核心技术初识:Prompt、RAG、Agent与大模型微调
运维·人工智能·人机交互·运维开发·学习方法
若云止水17 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(1)
数据库·nginx·ubuntu
非 白18 小时前
【服务器】Nginx
运维·服务器·nginx
一张假钞18 小时前
Hue Load Balance配置
算法·nginx·哈希算法·hue
ontheway-xx20 小时前
Nginx+PHP+MYSQL-Ubuntu在线安装
mysql·nginx·ubuntu·php
李恩111 天前
nginx的作用和应用场景
运维·nginx
m0_748252601 天前
服务器部署,用 nginx 部署后页面刷新 404 问题,宝塔面板修改(修改 nginx.conf 配置文件)
运维·服务器·nginx
qhd吴飞1 天前
linux 离线安装nginx
linux·服务器·nginx