Nginx 性能优化全方案!打造一个高效服务器

科技   2024-12-06 22:19   安徽  

戳下方名片,关注并星标

回复“1024”获取2TB学习资源!


👉体系化学习:运维工程师打怪升级进阶之路 4.0

   特色专栏  

MySQL PostgreSQL MongoDB

ElasticSearch Hadoop Redis

Kubernetes Docker DevOps

Kafka RabbitMQ Zookeeper 

监控平台 应用与服务 集群管理

Nginx Git Tools OpenStack

大家好,我是民工哥!

Nginx 性能优化全方案!帮你打造一个高效服务器。

Nginx 是一款高性能的Web服务器,广泛应用于互联网领域。然而在高并发、大流量的情况下,Nginx的性能可能会受到一定的影响。因此,对Nginx 进行性能优化是非常必要的。

本文将从多个方面介绍如何基于Nginx进行性能优化。

调整工作进程数和线程数

Nginx采用异步非阻塞的方式处理请求,这种方式可以充分利用CPU资源,提高并发处理能力。但是,过多的工作进程和线程会导致系统资源浪费,降低性能。因此,需要根据实际情况调整Nginx的工作进程数和线程数。

调整工作进程数

Nginx的工作进程数是指Nginx启动后生成的子进程数量。可以通过修改Nginx配置文件中的worker_processes参数来调整工作进程数。

例如:

worker_processes 4;

表示将Nginx的工作进程数设置为4。

调整线程数

每个工作进程都有一个默认的线程数,即Nginx的事件处理模型中包含的线程数。可以通过修改Nginx配置文件中的worker_connections参数来调整线程数。

例如:

worker_connections 1024;

表示将每个工作进程的线程数设置为1024。

需要注意的是,线程数并不是越大越好,因为线程之间的竞争可能会导致性能下降。因此,需要根据实际情况进行调整。

启用Gzip压缩

Gzip压缩是一种常用的网页压缩技术,可以减少传输的数据量,提高页面加载速度。Nginx支持Gzip压缩功能,可以通过配置Nginx来实现。

安装Gzip模块

首先需要在编译Nginx时安装Gzip模块。在Linux系统中,可以使用以下命令安装:

./configure --with-http_gzip_static_module --with-http_gzip_module
make && make install

配置Gzip压缩

在Nginx配置文件中添加以下内容:

http {
    ...
    gzip on; # 开启Gzip压缩功能
    gzip_min_length 1k; # 设置最小压缩文件大小为1KB
    gzip_buffers 4 16k; # 设置压缩缓冲区个数和大小
    gzip_http_version 1.1; # 设置支持的HTTP协议版本为1.1
    gzip_comp_level 2; # 设置压缩级别为2(速度与压缩率的平衡)
    gzip_types text/plain application/x-javascript text/css application/xml; # 设置需要压缩的文件类型
    ...
}

配置缓存策略

缓存是提高网站性能的重要手段之一。Nginx提供了多种缓存策略,可以根据实际需求进行配置。以下是一些常见的缓存策略:

配置浏览器缓存时间

通过设置HTTP响应头中的ExpiresCache-Control字段,可以控制浏览器缓存的时间。

例如:

location ~* \.(jpg|jpeg|gif|png|css|js)$ {
    add_header Cache-Control "public, max-age=31536000"# 设置静态资源的缓存时间为1年(单位:秒)
}

配置代理服务器缓存时间

如果Nginx作为反向代理服务器使用,可以通过设置proxy_cache_validproxy_cache_valid指令来控制代理服务器的缓存时间。

例如:

location / {
    proxy_pass http://backend; # 将请求转发到后端服务器
    proxy_cache mycache; # 启用缓存,命名为mycache
    proxy_cache_valid 200 302 60m; # 设置缓存有效时间为60分钟(单位:秒)
    proxy_cache_valid 404 1m; # 设置缓存有效时间为1分钟(单位:秒)
}

优化文件访问方式

在处理静态文件时,Nginx默认会将文件读取到内存中进行处理。这种方式在大文件或高并发情况下会导致内存消耗过大,影响性能。因此,可以采用优化文件访问方式来提高性能。以下是一些优化方法:

使用sendfile()函数发送文件数据

sendfile()函数可以直接将文件从磁盘读取并发送到网络,避免了数据在用户空间和内核空间之间的拷贝,提高了性能。可以通过在 Nginx 配置文件中添加以下内容来启用sendfile()函数:

http {
    ...
    sendfile on; # 开启sendfile()函数支持功能(需要操作系统支持)
    ...
}

启用sendfile_max_chunk和tcp_nopush参数

通过设置sendfile_max_chunktcp_nopush参数,可以控制 Nginx 在发送文件时的最大分片大小和TCP_CORK选项。

例如:

http {
    ...
    sendfile_max_chunk 1m; # 设置最大分片大小为1MB
    tcp_nopush on; # 开启TCP_CORK选项
    ...
}

优化日志配置

日志是排查问题的重要手段,但是过多的日志会导致磁盘空间不足,影响系统性能。因此,需要对Nginx的日志进行优化。以下是一些优化方法:

调整日志级别

Nginx支持多种日志级别,如debug、info、notice、warn、error等。可以通过修改Nginx配置文件中的log_level参数来调整日志级别。

例如:

http {
    ...
    log_level info; # 将日志级别设置为info
    ...
}

配置日志切割和压缩

为了减少日志占用的磁盘空间,可以配置日志切割和压缩功能。例如:

http {
    ...
    access_log /var/log/nginx/access.log combined buffer=32k flush=1m; # 配置访问日志切割和压缩功能
    error_log /var/log/nginx/error.log info; # 配置错误日志,并设置日志级别为info
    ...
}

其他优化建议

除了上述优化方法外,还有一些其他的优化建议:

使用CDN加速静态资源访问

CDN(Content Delivery Network)是一种内容分发网络,可以将静态资源缓存到离用户更近的节点上,提高访问速度。可以使用阿里云、腾讯云等云服务商提供的CDN服务。

使用HTTP/2协议提高传输效率

HTTP/2协议是一种新的HTTP协议,支持多路复用、头部压缩等功能,可以提高传输效率。需要在Nginx和客户端同时支持HTTP/2协议才能生效。可以通过修改Nginx配置文件中的listen指令来启用HTTP/2协议。例如:

server {
    listen 443 ssl http2; # 启用HTTPS并启用HTTP/2协议支持功能(需要操作系统和SSL库支持)
    ...
}
作者:M乔木 来源:
blog.csdn.net/qiaomuv/article/details/135607737

👍 如果你喜欢这篇文章,请点赞并分享给你的朋友!

公众号读者专属技术群

构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加微信好友)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。

扫码加我好友,拉你进群

企业级 Linux 的全新时代!红帽 RHEL 将成为微软官方 WSL发行版

Chrome 牵头成立「浏览器选择联盟」!反 Microsoft Edge,对抗微软垄断

大家都不学技术了!是中国程序员最大的悲哀吗?

突发!思科、Dell 禁止供应商供应中国的产品

国产 Arm CPU 大厂被曝大裁员!比例高达 50%

50.5k star,本地 SSL 证书生成神器,轻松解决 HTTPS 配置痛点!

替代 Win11!微软全新 Windows 系统曝光

突发!千万别点!微信群里的这种通知或为木马病毒

深入 Nginx 工作原理及优化技巧:从新手小白到专家的实用学习指南

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。在看支持我们吧!

民工哥技术之路
专注系统、Java后端、架构设计、微服务、集群、中间件等开源技术分享(后台回复 1024 免费赠送资源),关注我!一同成长!
 最新文章