如何在 Ubuntu 22.04 上部署 Nginx 并优化以应对高流量网站教程

简介

本教程将教你如何优化 Nginx,使其能够高效地处理高流量网站。 Nginx 是一个强大且高性能的 Web 服务器,以其高效处理大量并发连接的能力而闻名,这使得它成为高流量网站的流行选择。 正确优化 Nginx 可以显著提高服务器的性能,减少加载时间,并确保你的网站能够处理大量的请求而不会崩溃。

本教程将手把手地指导你完成优化 Nginx 以应对高流量的步骤,重点关注配置调整、缓存、连接处理和安全增强。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

  • 到此为止,我们的云服务器就远程连接上了。

安装和配置步骤

第一步:更新 Nginx 到最新版本

保持 Nginx 更新可以确保你拥有最新的性能改进、功能和安全补丁。

更新 Nginx 的命令:

# For Ubuntu/Debian
sudo apt update
sudo apt install nginx# For RHEL/AlmaLinux/Rocky Linux
sudo dnf update
sudo dnf install nginx

第二步:调整工作进程和连接数

Nginx 使用工作进程来处理传入的连接。优化这些设置对于处理高流量至关重要。

编辑 Nginx 配置文件:

sudo nano /etc/nginx/nginx.conf

调整工作进程和工作连接数:

worker_processes auto;
worker_connections 1024;
  • worker_processes auto;: 这个设置会自动将工作进程的数量设置为与可用的 CPU 核心数匹配,从而优化服务器的性能。
  • worker_connections 1024;: 指定每个工作进程可以同时处理的最大连接数。这个值可以根据服务器的性能和流量进行增加。

启用多线程(可选):

events {worker_connections 1024;multi_accept on;
}
  • multi_accept on;: 这个设置允许一个工作进程一次接受多个新连接,从而在高峰流量期间提高性能。

第三步:启用 Gzip 压缩

Gzip 压缩可以减少传输数据的大小,从而缩短加载时间并减少带宽使用。

在 Nginx 配置中启用 Gzip:

sudo nano /etc/nginx/nginx.conf

http 块下添加或修改以下行:

http {gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;gzip_min_length 256;gzip_comp_level 5;
}
  • gzip on;: 启用 Gzip 压缩。
  • gzip_types: 指定要压缩的 MIME 类型。
  • gzip_min_length 256;: 仅压缩大于 256 字节的响应。
  • gzip_comp_level 5;: 设置压缩级别(1-9);更高的级别提供更好的压缩,但会使用更多的 CPU。

第四步:配置静态内容缓存

缓存静态内容(如图像、CSS 和 JavaScript)可以减少服务器负载并加快响应速度。

将以下行添加到 server 块中:

location ~* \\.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";
}
  • expires 30d;: 将浏览器缓存过期时间设置为 30 天。
  • add_header Cache-Control "public, no-transform";: 添加缓存控制头。

第五步:优化缓冲区和超时

优化缓冲区和超时可以帮助 Nginx 更有效地处理更多连接,而不会使内存过载。

编辑主要的 Nginx 配置文件:

sudo nano /etc/nginx/nginx.conf

http 块下添加以下设置:

http {client_body_buffer_size 16k;client_max_body_size 8m;client_header_buffer_size 1k;large_client_header_buffers 4 16k;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;
}
  • client_body_buffer_size 16k;: 设置客户端请求的缓冲区大小。
  • client_max_body_size 8m;: 限制客户端请求的最大大小。
  • sendfile on;: 启用零拷贝文件传输,从而减少 CPU 负载。
  • tcp_nopush on;tcp_nodelay on;: 优化 TCP 连接处理以获得更好的性能。
  • keepalive_timeout 65;: 设置保持活动超时时间,允许连接保持打开 65 秒。

第六步:实现负载均衡

Nginx 可以将传入的流量分配到多个服务器上,从而提高性能和冗余。

在 Nginx 中配置负载均衡:

upstream backend {server backend1.example.com weight=3;server backend2.example.com;
}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
  • upstream backend { ... }: 定义一个包含多个服务器的后端组。
  • weight=3;: 以指定的权重分配流量,将三倍的流量发送到第一个服务器。

第七步:启用连接缓存和调优

Nginx 连接缓存和调优可以显著提高它处理多个连接的方式。

nginx.confhttp 块下添加以下指令:

http {proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_cache_valid 200 1h;proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;proxy_pass http://backend;}}
}
  • proxy_cache_path: 定义缓存代理响应的路径。
  • proxy_cache_use_stale: 如果后端服务器不可用,则使用过时的缓存响应。

第八步:配置安全设置

保护你的 Nginx 服务器还可以防止 DDoS 攻击并提高性能。

限制请求大小和速率限制:

http {limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;server {location / {limit_req zone=one burst=5;}}
}
  • limit_req_zone: 定义用于速率限制的共享内存区域。
  • rate=10r/s: 将请求限制为每秒 10 个请求。

第九步:测试并重启 Nginx

在进行更改后,测试你的 Nginx 配置是否有错误并重启服务器。

测试 Nginx 配置:

sudo nginx -t

重启 Nginx:

sudo systemctl restart nginx

结尾

优化 Nginx 以应对高流量网站涉及到调整各种设置,以提高性能、减少延迟和保护服务器。 通过遵循这些步骤,你可以确保你的 Nginx 服务器能够有效地处理大量流量。 定期监控服务器的性能,并根据需要调整设置,以保持其最佳运行状态。

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

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

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

相关文章

【持续更新中】transformer详解和embedding大模型

这里记录一下自己学习embedding大模型的记录,涉及到transformer和bert这些。 一切都可以编码,比如说图片是三原色 背景介绍 训练集和测试集的分,无监督学习,现在基本都是使用无监督学习,有监督学习的话参考计算机视觉…

csrf跨站请求伪造(portswigger)无防御措施

前言:基础csrf学习(没有任何防御措施) 内容来自portswigger,一个靶场练习,国外的网站,可能需要翻墙 要使 CSRF 攻击成为可能,必须满足三个关键条件: 相关操作。应用程序中存在攻击…

cocos creator 3.x版本如何添加打开游戏时首屏加载进度条

前言 项目有一个打开游戏时添加载入进度条的需求。这个功能2.X版本是自带的,不知为何在3.X版本中移除了。 实现 先说一下解决思路,就是在引擎源码加载场景的位置插入一个方法,然后在游戏入口HTML处监听即可。 1.找到对应源码脚本 在coco…

Zookeeper在中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心的解决方案

前言 Zookeeper是什么? ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应…

idea报错:There is not enough memory to perform the requested operation.

文章目录 一、问题描述二、先解决三、后原因(了解) 一、问题描述 就是在使用 IDEA 写代码时,IDEA 可能会弹一个窗,大概提示你目前使用的 IDEA 内存不足,其实就是提醒你 JVM 的内存不够了,需要重新分配。弹…

Anaconda+PyTorch(CPU版)安装

1.Anaconda下载 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 如果已安装python,下载之前要彻底删除之前下载的python 2.Anaconda安装 3.添加环境变量 //根据实际安装路径进行更改 D:\Anaconda D:\Anaconda\Scripts D:\…

使用apisix+oidc+casdoor配置微服务网关

一、服务架构图 二、安装配置 1. 安装配置apisix (1). 快速启动及验证: curl -sL https://run.api7.ai/apisix/quickstart | sh该命令启动 apisix-quickstart 和 etcd 两个容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 …

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本,所以有些配置,是可以不用做的,下面仅记录新增操作&#…

STM32中断详解

STM32中断详解 NVIC 中断系统中断向量表相关寄存器中断优先级中断配置 外部中断实验EXTI框图外部中断/事件线映射中断步骤初始化代码实现 定时器中断通用定时器相关功能标号1:时钟源标号 2:控制器标号 3:时基单元 代码实现 NVIC 中断系统 STM…

常见的中间件漏洞

1.tomcat 1.1 CVE-2017-12615(put上传) 当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产 ⽣,(需要允许put请求) , 攻击者可以利⽤PUT方法通过精心构造的数据包…

【JAVA】神经网络的基本结构和前向传播算法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…

Qt 12.28 day3

作业: 1】 思维导图 2】 在登录界面的登录取消按钮进行以下设置: 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&a…

Ubuntu 20.04.1 LTS搭建nginx + php7.4运行环境

本文基于https://www.rosehosting.com/blog/how-to-install-php-7-4-with-nginx-on-ubuntu-20-04/的翻译和实践记录。 安装 Nginx 默认情况下,最新版本的 Nginx 位于 Ubuntu 20.04 默认存储库中。您可以使用以下命令安装它: apt-get install nginx -y…

【专题】2024年出口跨境电商促销趋势白皮书报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38722 在当今全球化加速演进、数字经济蓬勃发展的大背景下,跨境电商行业正以前所未有的态势重塑国际贸易格局,成为各方瞩目的焦点领域。 根据亚马逊发布的《2024年出口跨境电商促销趋势白皮书》,…

UE5材质节点Camera Vector/Reflection Vector

Camera Vector相机向量,输出像素到相机的方向,结果归一化 会随着相机移动而改变 Reflection Vector 反射向量,物体表面法线反射到相机的方向,x和y和camera vector相反 配合hdr使用

【数据仓库】spark大数据处理框架

文章目录 概述架构spark 架构角色下载安装启动pyspark启动spark-sehll启动spark-sqlspark-submit经验 概述 Spark是一个性能优异的集群计算框架,广泛应用于大数据领域。类似Hadoop,但对Hadoop做了优化,计算任务的中间结果可以存储在内存中&a…

【Elasticsearch】集群配置深度解析与实践

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

Three.js教程004:坐标辅助器与轨道控制器

文章目录 坐标辅助器与轨道控制器实现效果添加坐标辅助器添加轨道控制器完整代码完整代码下载坐标辅助器与轨道控制器 实现效果 添加坐标辅助器 创建坐标辅助器: const axesHelper = new Three.AxesHelper(5);添加到场景中: scene.

紫光展锐推出高性能四核4G 智能穿戴平台W377E,应用场景更丰富

近日,紫光展锐正式推出高性能4G 智能穿戴平台W377E。该产品面向不同的应用场景,拥有丰富特性和超低功耗,进一步壮大紫光展锐的智能穿戴产品组合。紫光展锐面向中高端和海量的智能穿戴市场,持续提供技术先进、高效安全、高质可靠的…

Android着色器SweepGradient渐变圆环,Kotlin

Android着色器SweepGradient渐变圆环,Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.SweepGradient import android…