在Linux中,Nginx可以做那些优化?

news/2025/3/20 0:00:20/文章来源:https://www.cnblogs.com/huangjiabobk/p/18782177

在Linux环境中,对Nginx进行优化可以从多个方面入手,包括配置文件优化、资源管理优化、性能调优以及安全性增强等。以下是一些常见的优化措施:

1.配置文件优化
1. 调整worker进程数量
  • 参数worker_processes

  • 优化建议:将worker_processes设置为CPU核心数。例如,如果你的服务器有4个CPU核心,可以设置为:

    worker_processes 4;
    
  • 原理:每个worker进程可以独立处理请求,将进程数设置为CPU核心数可以充分利用CPU资源,避免过多的上下文切换。

2. 优化连接池
  • 参数worker_connections

  • 优化建议:根据服务器的内存和负载情况,适当增加worker_connections的值。例如:

    events {worker_connections 10240;
    }
    
  • 原理worker_connections定义了每个worker进程可以同时处理的最大连接数。增加该值可以提高Nginx的并发处理能力,但需要确保系统有足够的资源来支持这些连接。

3. 启用多线程支持
  • 参数worker_rlimit_nofile

  • 优化建议:如果系统支持,可以启用多线程支持,提高文件描述符的限制。例如:

    worker_rlimit_nofile 65535;
    
  • 原理worker_rlimit_nofile用于设置每个worker进程可以打开的最大文件描述符数量。增加该值可以避免因文件描述符不足而导致的连接拒绝问题。

4. 优化日志记录
  • 参数access_logerror_log

  • 优化建议:根据实际需求调整日志级别和日志路径。例如,将日志存储在高速存储设备上,或者将日志输出到远程日志服务器。例如:

    access_log /var/log/nginx/access.log main buffer=32k;
    error_log /var/log/nginx/error.log warn;
    
  • 原理:合理配置日志可以减少磁盘I/O操作,提高Nginx的性能。同时,将日志输出到远程服务器可以减轻本地服务器的负担。

2.资源管理优化
1. 优化静态资源缓存
  • 参数expiressendfile

  • 优化建议:为静态资源(如图片、CSS、JavaScript等)设置较长的缓存时间,并启用sendfile。例如:

    location ~* \.(jpg|jpeg|png|gif|css|js)$ {expires 30d;sendfile on;
    }
    
  • 原理expires指令可以设置静态资源的缓存时间,减少客户端对静态资源的重复请求。sendfile指令可以利用内核的高效文件传输机制,提高静态资源的传输速度。

2. 启用TCP连接复用
  • 参数keepalive_timeoutkeepalive_requests

  • 优化建议:适当增加keepalive_timeoutkeepalive_requests的值,以延长TCP连接的保持时间并增加每个连接可以处理的请求数。例如:

    keepalive_timeout 65;
    keepalive_requests 100;
    
  • 原理:TCP连接复用可以减少建立和关闭连接的开销,提高服务器的性能和吞吐量。

3. 优化文件描述符限制
  • 优化建议:在Linux系统中,可以通过修改/etc/security/limits.conf文件来增加文件描述符的限制。例如:

    * hard nofile 65535
    * soft nofile 65535
    
  • 原理:增加文件描述符的限制可以避免因文件描述符不足而导致的连接拒绝问题,提高Nginx的并发处理能力。

3.性能调优
1. 启用Gzip压缩
  • 参数gzip

  • 优化建议:启用Gzip压缩,减少响应数据的大小。例如:

    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied any;
    
  • 原理:Gzip压缩可以显著减少响应数据的大小,提高传输速度,尤其适用于文本内容(如HTML、CSS、JavaScript等)。

2. 优化缓存策略
  • 参数proxy_cachefastcgi_cache

  • 优化建议:如果Nginx作为反向代理服务器,可以启用缓存功能,减少对后端服务器的请求。例如:

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
    server {location / {proxy_pass http://backend;proxy_cache my_cache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;}
    }
    
  • 原理:缓存功能可以将后端服务器的响应存储在本地缓存中,减少对后端服务器的请求次数,提高响应速度和服务器的吞吐量。

3. 优化连接队列
  • 参数listenbacklog

  • 优化建议:调整listen指令的参数,启用reuseportso_keepalive。例如:

    server {listen 80 reuseport so_keepalive=on;
    }
    
  • 原理reuseport可以提高多核CPU环境下的性能,so_keepalive可以保持长连接的活跃状态,减少连接中断的概率。

4.安全性增强
1. 限制请求速率
  • 参数limit_req

  • 优化建议:限制客户端的请求速率,防止恶意攻击。例如:

    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    server {location / {limit_req zone=one burst=5 nodelay;}
    }
    
  • 原理limit_req可以限制客户端的请求速率,防止恶意攻击(如DDoS攻击)对服务器造成过大压力。

2. 隐藏版本信息
  • 参数server_tokens

  • 优化建议:将server_tokens设置为off,隐藏Nginx的版本信息。例如:

    server_tokens off;
    
  • 原理:隐藏版本信息可以减少被攻击的风险,因为攻击者无法通过版本信息找到已知漏洞。

3. 启用HTTPS
  • 优化建议:启用HTTPS,确保数据传输的安全。例如:

    server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/certificate.pem;ssl_certificate_key /path/to/your/private.key;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;
    }
    
  • 原理:HTTPS可以加密数据传输,防止数据被窃取或篡改,提高网站的安全性。

5.监控与日志
1. 启用监控
  • 优化建议:使用工具(如Prometheus、Grafana、Zabbix等)监控Nginx的性能指标,如请求速率、响应时间、连接数等。
  • 原理:监控可以帮助及时发现性能问题,提前进行优化调整。
2. 优化日志
  • 优化建议:合理配置日志格式和级别,避免记录不必要的信息,减少磁盘I/O操作。
  • 原理:优化日志可以提高Nginx的性能,同时便于后续的日志分析和问题排查。
6.我的总结

综上所述,Nginx的优化是一个系统性工程,需要根据实际的业务需求和服务器资源情况进行综合调整。通过合理配置文件、优化资源管理、调整性能参数、增强安全性以及启用监控,可以显著提升Nginx的性能和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901790.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

drm study

学习过程 0319:对于任何驱动来说,buffer是最重要的,知道了buffer的创建使用这个驱动就会一半了;现在感觉是一个无头苍蝇,感觉非常复杂:数据结构非常多,之间的关系也非常复杂;不过没关系,先研究buffer通路;可以看见应用层对mmap写入的hello world,驱动中vkms_obj->…

pcie 简介及引脚定义

随着现代处理器技术的发展,在互连领域中,使用高速差分总线替代并行总线是大势所趋。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的总线带宽。 PCI总线使用并行总线结构,在同一条总线上的所有…

C++ 基础(1)

0x01 第一个C++程序 #include <iostream>int main() {std::cout << "Hello World!\n"; } // std::cout 向控制台输出内容的指令 // << 输出的运算符 // "" 字符串内容的边界符 // \n 输出换行 // Hello World 输出字符…

在ubuntu系统下与开发板连接问题记录

对我所遇到的问题以及解决方法进行简单的记录在开发板与ubuntu(非虚拟机)连接之后使用lsmod查看是否连接lsusb 我的显示如下:如果可以看到自己的USB设备 那么就说明你已经安装了驱动 如果没有 请安装你的串口对应的驱动 我的驱动是CH340 没有安装的朋友可以去下面网站进行…

maven为什么发生依赖冲突?怎么解决依赖冲突?

maven为什么发生依赖冲突?怎么解决依赖冲突? 我们在开发的时候,偶尔会遇到依赖冲突的时候,一般都是NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。打开搜索框又发现有这个类,明明就是引入进来了,就是找不到,让人头疼 1. 依赖冲突场景 在maven中依赖…

unstructured

unstructured 是一个开源的 Python 库,专门用于处理非结构化数据,如从 PDF、Word 文档、HTML 文件等中提取文本内容,并将其转换为结构化格式(1)安装依赖库pip install unstructured使用textfrom unstructured.partition.auto import partitionfilename = "a.txt"…

idea如何激活到2099年

前言 最近发现idea如何激活使用的问题、 网络上各种都是骗关注加各种公众号的最后也没有解决问题,下面分享一下我的激活方法是如何激活到2099年。目前适用于idea的所有版本。我以最新的ideaIU-2024.3为例。 一去官网上下载idea 官网下载地址:https://www.jetbrains.com.cn/id…

202108032324 - kafka的生产流程

由上图可以看出:KafkaProducer有两个基本线程: 主线程: 负责消息创建,拦截器,序列化器,分区器等操作,并将消息追加到消息收集器 RecoderAccumulator中; 消息收集器RecoderAccumulator为每个分区都维护了一个Deque<ProducerBatch> 类型的双端队列。 ProducerBatch…

Cython二进制逆向系列(三)运算符

在这篇文章里,我们会讨论Cython是如何处理运算符的(数学运算符、位运算符、in/not in 运算符、 ==运算符与逻辑运算符)。总的来叔其中大部分是调用虚拟机api来实现的。Cython二进制逆向系列(三)运算符在开始前,先给出本文用到的py源代码 def test1(x, y):# 数学运算符a…

QOJ 9785 Shrooks

曼哈顿距离转切比雪夫距离,对限制的贪心满足,扩宽限制,简化信息首先考虑限制的形式:对于两点 \((x_1, y_1), (x_2, y_2)\),要求 \(|x_1 - x_2| + |y_1 - y_2| \le n\)。 但是这个式子与 \(x_1, x_2, y_1, y_2\) 这 \(4\) 个值都强相关,且这里的绝对值也并不好拆开处理。 …

golang的GC机制

一、垃圾回收 什么是垃圾回收?垃圾回收(GC,garbage collection)是自动内存管理的一种形式,通常由垃圾收集器收集并适时回收或重用不再被对象占用的内存,比如众所周知的Java语言就能很好的支持GC。后起之秀——Go语言也同样支持垃圾回收,它使得Go程序员在编写程序的时候不…

fastjson漏洞复现(fastjson 1.2.47)

原理: Fastjson 的 @type 字段允许反序列化时动态指定类,攻击者可以通过指定带有危险行为的类,并结合 RMI/LDAP 远程加载恶意类,从而实现命令执行。开启vulhub靶场//如何验证是否存在fastjson反序列化漏洞 有json数据传输的地方可能存在 可以尝试使用dnslog带外但是不知道…