如何在 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.mzph.cn/pingmian/65706.shtml

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

相关文章

活动预告 |【Part1】Microsoft Azure 在线技术公开课:数据基础知识

课程介绍 参加“Azure 在线技术公开课:数据基础知识”活动,了解有关云环境和数据服务中核心数据库概念的基础知识。通过本次免费的介绍性活动,你将提升在关系数据、非关系数据、大数据和分析方面的技能。 活动时间:01 月 07 日…

4G报警器WT2003H-16S低功耗语音芯片方案开发-实时音频上传

一、引言 在当今社会,安全问题始终是人们关注的重中之重。无论是家庭、企业还是公共场所,都需要一套可靠的安全防护系统来保障人员和财产的安全。随着科技的飞速发展,4G 报警器应运而生,为安全防范领域带来了全新的解决方案。…

短视频矩阵源码开发提供api/saas短视频矩阵快速对接搭建

上周,我有幸接待了一批来自教育行业的伙伴。令人惊讶的是,他们目前主要依赖于传统的线下推荐和地面推广方式进行业务拓展,对线上营销策略了解不多。这种情况引发了我对当前实体行业向线上转型的思考。 在当今社会,随着短视频营销逐…

GPU 进阶笔记(一):高性能 GPU 服务器硬件拓扑与集群组网

记录一些平时接触到的 GPU 知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用 1 术语与基础 1.1 PCIe 交换芯片1.2 NVLink 定义演进:1/2/3/4 代监控1.3 NVSwitch1.4 NVLink Switch1.5 HBM (High Bandwidth Memory) 由…

24年收尾之作------动态规划<六> 子序列问题(含对应LeetcodeOJ题)

目录 引例 经典LeetCode OJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门 LeetCode<300>最长递增子序列 画图分析: 使用动态规划解决 1.状态表示 dp[i]表示以i位置元素为结尾的子序列中&#xff0c;最长递增子序列的长度 2.…

使用 ASP.NET Core wwwroot 上传和存储文件

在 ASP.NET Core 应用程序中上传和存储文件是用户个人资料、产品目录等功能的常见要求。本指南将解释使用wwwroot存储图像&#xff08;可用于文件&#xff09;的过程以及如何在应用程序中处理图像上传。 步骤 1&#xff1a;设置项目环境 确保您的 ASP.NET 项目中具有必要的依…

格式化输出年月日

直接上图 结论&#xff1a;老老实实用yyyy&#xff0c;得到的年月日是我们口头上说的时间&#xff0c;而YYYY有点反人类.... 对于一年的最后一周的一些日子&#xff0c;会统计成下一年&#xff1b; 对于下一年的第一周的一些日子&#xff0c;会统计成上一年&#xff1b; 你猜…

一文详解串行、并行、同步、异步

串行、并行、同步和异步是计算机科学和电子学中常见的概念&#xff0c;涉及数据传输、处理和通信的方式。它们各自有不同的应用场景和特点。以下是这四个概念的详细解释&#xff1a; 1. 串行&#xff08;Serial&#xff09; 定义&#xff1a; 串行指的是数据在传输过程中按位…

html5css3

1.html5新增语义化标签 <header><nav><article><section><aside><footer> 2.新增多媒体标签 视频<video>格式&#xff1a;map4,webm,ogg <video controls"controls" autoplay"autoplay" muted"mute…

【超级详细】七牛云配置阿里云域名详细过程记录

0. 准备一个阿里云域名&#xff0c;记得要备案&#xff01;&#xff01;&#xff01;&#xff01; 1. 创建七牛云存储空间 首先&#xff0c;登录七牛云控制台&#xff0c;创建一个新的存储空间&#xff08;Bucket&#xff09;。这个存储空间将用于存放你的文件&#xff0c;并…

Cornerstone3D:了解Nifti文件,并查看元数据

Nifti 全称Neuroimaging Informatics Technology Initiative是一种专为存储医学和神经影像数据而设计的文件格式。设计目的是高效的存储三维或四维图像数据&#xff0c;同时将相关的元数据紧凑地嵌入文件中。Nifti文件的组成&#xff1a;头信息&#xff08;元数据&#xff09;…

【C++】2029:【例4.15】水仙花数

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;我的做法思路分析优势不足之处 &#x1f4af;老师的做法思路分析优势不足 &#x1f4af;对比和优化实现方式对比优化思路和操作1. 直接分解数字的各位…

形象地理解UE4中的数据结构 TLinkedListBase

大家都熟知链表&#xff0c;但不一定能快速看懂UE4中的数据结构。 TLinkedListBase表示“链接”中的一个结点&#xff0c;有三个成员&#xff1a; 一、ElementType Element; 表示具体的业务&#xff0c;例如int链条中的一个整数。 二、NextLink 表示 “下一个Node”&#…

RabbitMQ基础篇之Java客户端 Work Queues

文章目录 模型概述需求实现步骤创建队列定义消费者定义消息发送测试执行观察结论多消费者的作用性能差异生产环境中的应用 处理速度差异的情况 优化示例总结 模型概述 Work Queues 模型也称为任务模型&#xff0c;多个消费者绑定到同一个队列&#xff0c;共同消费队列中的消息…

CP AUTOSAR标准之FlexRayDriver(AUTOSAR_SWS_FlexRayDriver)(更新中……)

1 简介和功能概述 FlexRay驱动程序(Fr)抽象了特定FlexRay通信控制器(CC)的硬件相关实现细节。本规范主要依赖于符合FlexRay规范[13]的FlexRay CC。此外,本规范还支持符合FlexRay规范[14]的旧版FlexRay控制器。本SWS中因支持的FlexRay规范不同而导致的不同行为在适用的情况下以…

vscode代码AI插件Continue 安装与使用

“Continue” 是一款强大的插件&#xff0c;它主要用于在开发过程中提供智能的代码延续功能。例如&#xff0c;当你在编写代码并且需要进行下一步操作或者完成一个代码块时&#xff0c;它能够根据代码的上下文、语法规则以及相关的库和框架知识&#xff0c;为你提供可能的代码续…

ubuntu 如何使用vrf

在Ubuntu或其他Linux系统中&#xff0c;您使用ip命令和sysctl命令配置的网络和内核参数通常是临时的&#xff0c;这意味着在系统重启后这些配置会丢失。为了将这些配置持久化&#xff0c;您需要采取一些额外的步骤。 对于ip命令配置的网络接口和路由&#xff0c;您可以将这些配…

二、SQL语言,《数据库系统概念》,原书第7版

文章目录 一、概览SQL语言1.1 SQL 语言概述1.1.1 SQL语言的提出和发展1.1.2 SQL 语言的功能概述 1.2 利用SQL语言建立数据库1.2.1 示例1.2.2 SQL-DDL1.2.2.1 CREATE DATABASE1.2.2.2 CREATE TABLE 1.2.3 SQL-DML1.2.3.1 INSERT INTO 1.3 用SQL 语言进行简单查询1.3.1 单表查询 …

【ArcGIS Pro/GeoScene Pro】可视化时态数据

可视化过去二十年新西兰国际旅游业的发展变化 工程数据下载 ArcGIS Pro 快速入门指南—ArcGIS Pro | 文档 添加数据 数据为中国旅客数据 转置表字段 列数据转行数据

WebRTC :原理、协议和应用场景

WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种用于在Web浏览器和移动应用程序之间进行实时通信的开放标准。它通过将音频、视频和数据传输集成到Web浏览器中&#xff0c;使得实时通信变得简单且无需任何插件或第三方软件。 一、WebRTC 的原理 WebRTC的实…