你信不信,五分钟快速学习Nginx

Nginx是什么?

Nginx 是一个高性能的HTTP和反向代理服务器。它是由俄罗斯程序员Igor Sysoev开发的,最初是为了解决俄罗斯大型的门户网站的高流量问题。

说到反向代理,那么有没有正向代理呢?
  • 正向代理:客户端非常明确要访问的服务器地址;服务器只知道请求来自哪个服务器(不知道哪个客户端);正向代理屏蔽或者隐藏了真实客户端。例如:当我们无法直接访问国外网站时,我们需要通过代理服务器(FQ)来访问,通过代理服务器去访问我们指定的网址。

  • 反向代理:多个客户端向反向代理服务器发送请求,Nginx 根据一定的规则将请求分发到不同的服务器;客户端不清楚请求将被分发到哪台服务器,反向代理隐藏了服务器的信息。

正向代理代理客户端的请求去访问目标服务器,目标服务器可能是一个反向服务器,反向代理了多台真实的服务器。

在这里插入图片描述
说到反向代理,不得不说下负载均衡,毕竟利用好反向代理,可以完美解决流量高并发的问题!

负载均衡

总说负载均衡,负载均衡是做什么用的?什么场景使用?

负载均衡是用来分配客户端请求到多个服务器的机制,常用于解决高负载和提高系统可用性的问题。

  • 负载量:客户端发送的请求数量,也是负载量。
  • 均衡规则:反向代理服务器根据一定的规则将请求分发到不同的服务器上处理。
  • 负载均衡可分为硬件负载均衡(成本较高)和软件负载均衡(成本较低)。
  • 软件负载均衡是利用现有的技术结合主机硬件实现的一种消息队列分发机制。

在这里插入图片描述

Nginx的核心要点

1、事件驱动

Nginx使用了一个高效的异步事件模型,基于I/O多路复用,特别是epoll(在Linux上)和kqueue(在BSD系统上)。这种模型允许Nginx同时处理大量的并发连接,而不会因为每个连接占用大量的内存资源。

在Nginx配置文件中,可以设置每个进程的最大连接数(worker_connections),以及如何处理并发连接:

events {worker_connections 1024; # 每个进程最多同时处理1024个连接
}
2、高度可扩展

Nginx能够支持同时处理成千上万个连接,这使得它非常适合大型网站和需要高并发处理能力的应用。

Nginx 可以为不同的虚拟主机设置不同的worker进程数,以增加并发处理能力:

http {worker_processes auto; # 根据系统CPU核心数自动设置worker进程数
}
3、轻量级

与传统的基于进程的Web服务器(如Apache)相比,Nginx在处理请求时占用的内存更少。这是因为Nginx使用事件驱动模型,每个连接只占用很小的内存空间。比如说可以设置每个worker进程的内存限制:

events {worker_rlimit_nofile 1024; # 每个worker进程的最大打开文件描述符数
}
4、热部署

Nginx支持热部署,即在不重启服务器的情况下更新配置和模块。要实现热部署,可以使用 nginx -s ``reload命令。在修改了Nginx配置文件后,可以通过以下命令热部署配置:

sudo nginx -s reload
5、负载均衡

Nginx内置了负载均衡功能,可以通过upstream模块在多个后端服务器之间分配客户端请求,以此提高整个服务系统的处理能力。以下是一个简单的upstream配置,它将请求轮询分配到三个后端服务器:

upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}server {
location / {
proxy_pass http://backend; # 将请求转发到upstream定义的backend组
}
}
6、高性能

Nginx在多种标准的Web性能测试中表现出色,能够快速处理静态文件、索引文件和代理请求。配置Nginx作为反向代理服务器,为大型静态文件下载服务:

location /files/ {alias /path/to/files/; # 设置实际文件存储路径expires 30d; # 设置文件过期时间为30天
}
7、安全性,Nginx支持SSL/TLS协议

Nginx支持SSL/TLS协议,可以配置为安全的Web服务器或反向代理。

server {listen 443 ssl;ssl_certificate /path/to/fullchain.pem; # 证书路径ssl_certificate_key /path/to/privatekey.pem; # 私钥路径ssl_protocols TLSv1.2 TLSv1.3; # 支持的SSL协议
}

Nginx支持的复杂均衡调度算法

Nginx支持多种复杂的负载均衡调度算法,以适应不同的应用场景和需求。以下是几种常见的负载均衡算法的详细说明和示例:

1、weight轮询(默认)

weight轮询(Round Robin)是Nginx默认的负载均衡算法。它按顺序将请求逐一分配到不同的服务器上。通过设置服务器权重(weight)来调整不同服务器上请求的分配率。如果某一服务器宕机,Nginx会自动将该服务器从队列中剔除,请求代理会继续分配到其他健康的服务器上。

upstream backend {server backend1.example.com weight=3; # 设置backend1的权重为3server backend2.example.com; # backend2的权重为默认值1server backend3.example.com weight=5; # 设置backend3的权重为5
}
2、IP Hash

IP Hash算法根据客户端请求的IP地址的哈希值进行匹配,将具有相同IP哈希值的客户端分配到指定的服务器。这样可以确保同一客户端的请求始终被分配到同一台服务器,有助于保持用户的会话状态。

upstream backend {ip_hash; # 启用IP哈希算法server backend1.example.com;server backend2.example.com;
}
3、fair

fair 调度算法是一种根据服务器处理请求的响应时间和处理效率进行负载均衡的方法。它结合了轮询和IP哈希的优点,但Nginx默认不支持公平调度算法,需要安装额外的模块(upstream_fair)来实现。

upstream backend {fair; # 启用公平调度算法server backend1.example.com;server backend2.example.com;server backend3.example.com;
}
4、URL Hash

URL Hash 算法根据访问的URL的哈希结果分配请求。每个请求的URL会被分配到指定的服务器,这有助于提高缓存效率。但这种方法需要安装Nginx的hash软件包。

upstream backend {hash $request_uri; # 启用URL哈希算法server backend1.example.com;server backend2.example.com;
}
# 根据请求的URL哈希值来决定将请求发送到backend1还是backend2。

Nginx实践

Nginx 通过配置 .conf 静态文件运行(如/usr/local/nginx/conf/vhost/admin.conf)。
upstream backend_servers {server backend1.example.com;server backend2.example.com;server backend3.example.com;
}server  {listen 80;  # 服务端口号client_max_body_size 100m;  # body请求数据大小index index.html;  # 项目地址root  /user/project/admin;  # 项目根目录地址# 路由配置location ~ /* {proxy_pass  http://127.0.0.1:3001;  # 代理服务地址 proxy_pass http://backend_servers;proxy_redirect     off; 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_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;proxy_max_temp_file_size 0;proxy_connect_timeout      90;proxy_send_timeout         90;proxy_read_timeout         90;proxy_buffer_size          4k;proxy_buffers              4 32k;proxy_busy_buffers_size    64k;proxy_temp_file_write_size 64k;}location ~ .*.(gif|jpg|jpeg|png|swf)$ {expires      1d;}location ~ .*.(js|css)?$ {expires      24h;}location ~ /.well-known {allow all;}location ~ /. {deny all;}access_log  /user/logs/admin.log; # 记录日志
}

配置详情如下:

server:定义一个虚拟主机的配置块,一个 HTTP 中可以配置多个 server。

listen 80:设置服务端监听的端口号为 80。

client_max_body_size 100m:设置请求中允许的最大 body 大小为 100 MB。

index index.html:设置项目地址的默认文件为 index.html。

root /user/project/admin:指定项目根目录的路径。

location /:配置请求路径为 / 的 location 块。

  • proxy_pass http://127.0.0.1:3001:将请求代理到地址的后端服务器。
  • proxy_redirect off:关闭代理重定向。
  • proxy_set_header:设置代理请求头。
  • proxy_next_upstream:定义当后端服务器返回错误时,Nginx 将如何处理请求。
  • proxy_max_temp_file_size:设置允许的最大临时文件大小。
  • proxy_connect_timeout、proxy_send_timeout、proxy_read_timeout:定义代理连接、发送和读取超时时间。
  • proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size:设置代理缓冲区的大小。
  • proxy_temp_file_write_size:设置代理临时文件的写入大小。

location ~ .*.(gif|jpg|jpeg|png|swf)$:配置请求以 .gif、.jpg、.jpeg、.png 或 .swf 结尾的文件的 location 块。

  • expires 1d:设置这些文件的过期时间为 1 天。

location ~ .*.(js|css)?$:配置请求以 .js 或 .css 结尾的文件的 location 块。

  • expires 24h:设置这些文件的过期时间为 24 小时。

location ~ /.well-known:配置请求以 /.well-known 开头的路径的 location 块。

  • allow all:允许所有请求访问该路径。

location ~ /. :配置以 . 开头的路径的 location 块。

  • deny all:禁止所有请求访问该路径。

access_log /user/logs/admin.log:指定记录日志的路径为 /user/logs/admin.log。

Nginx 配置的实战案例通常涉及多种场景,包括但不限于静态资源服务、反向代理、负载均衡、HTTPS 配置、安全防护等。以下是一些常见的 Nginx 配置实战案例:

静态资源服务
server {listen 80;server_name example.com;location / {root /path/to/your/static/files;index index.html index.htm;}location ~* \.(jpg|png|gif|jpeg)$ {expires 30d;add_header Cache-Control "public";}
}

在这个案例中,Nginx 配置为服务静态文件,如 HTML、CSS、JavaScript 和图片等。通过设置 root 指令,指定了静态文件的根目录。同时,对于图片文件,通过 expires 指令设置了缓存时间为 30 天,减少了服务器的负载和用户等待时间。

反向代理
server {listen 80;server_name api.example.com;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;}
}

这个案例展示了如何配置 Nginx 作为反向代理服务器。当客户端请求 api.example.com 时,Nginx 会将请求转发到后端服务器集群。通过设置 proxy_set_header,可以修改客户端请求的头部信息,确保后端服务器能够正确处理请求。

负载均衡
http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;server_name example.com;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;}}
}

在这个负载均衡的案例中,Nginx 将请求分发给多个后端服务器。通过 upstream 指令定义了一个服务器组,然后在 location 块中使用 proxy_pass 指令将请求代理到这个服务器组。Nginx 支持多种负载均衡策略,如轮询(默认)、IP 哈希等。

HTTPS 配置
server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/your/fullchain.pem;ssl_certificate_key /path/to/your/private.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;location / {root /path/to/your/https/static/files;index index.html index.htm;}
}

这个案例展示了如何配置 Nginx 以支持 HTTPS。通过指定 SSL 证书和私钥的路径,以及设置 SSL 协议和加密套件,可以确保数据传输的安全。同时,建议使用 HTTP/2 协议以提升性能。

安全防护
server {listen 80;server_name example.com;location / {# ... 省略其他配置# 防止 SQL 注入等攻击rewrite ^/(.*)$ /index.php?param=$1 break;# 限制请求方法,只允许 GET 和 POSTif ($request_method !~ ^(GET|POST)$ ) {return 444;}# 防止跨站请求伪造add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";add_header X-XSS-Protection "1; mode=block";}
}

在这个安全防护的案例中,Nginx 配置了多种安全增强措施。通过 rewrite 指令,可以防止一些常见的 Web 攻击,如 SQL 注入。通过限制请求方法,可以减少服务器被恶意利用的风险。同时,添加了一些 HTTP 头部来增强浏览器安全,如防止点击劫持、MIME 类型嗅探和跨站脚本攻击(XSS)。
这些案例仅是 Nginx 配置的冰山一角。N

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

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

相关文章

Swift Publisher 5 for mac:打造精美版面

Swift Publisher 5 for mac:打造精美版面 Swift Publisher 5是一款专业的版面设计和编辑工具,为Mac用户提供了强大的设计功能和直观的操作界面。以下是关于Swift Publisher 5的功能介绍: 直观易用的界面:用户能够轻松地使用Swift …

每日两题 / 189. 轮转数组 560. 和为 K 的子数组(LeetCode热题100)

189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 向右轮转将使尾部k个元素顶到头部 将整个数组反转&#xff0c;再分别反转前k个元素和剩下的元素即可 class Solution { public:void rotate(vector<int>& nums, int k) {k % nums.size();reverse(nums.begi…

C# 自动填充文字内容到指定图片

目录 需求 开发运行环境 方法设计 实现代码 AddText方法 图片转Base64 调用示例 小结 需求 在我们的一些发布系统项目应用中&#xff0c;会经常发布一些链接图标&#xff0c;该图标基本上以模板背景为主&#xff0c;并填充项目文字内容。解决方式一般会让美工进行制作…

Qt 拖放功能详解:理论与实践并举的深度指南

拖放&#xff08;Drag and Drop&#xff09;作为一种直观且高效的用户交互方式&#xff0c;在现代图形用户界面中扮演着重要角色。Qt 框架提供了完善的拖放支持&#xff0c;允许开发者在应用程序中轻松实现这一功能。本篇博文将详细阐述Qt拖放机制的工作原理&#xff0c;结合详…

代码随想录阅读笔记-回溯【N皇后】

题目 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案&#xff0c;该方案中 Q 和 . 分别代表…

【2024】使用Rancher管理k8s集群和创建k8s集群

Rancher管理k8s集群及创建k8s集群。 Rancher版本为:2.8.2目录 rancher管理k8s集群rancher创建k8s集群rancher管理k8s集群 使用rancher管理已经存在的k8s集群。 本部分内容需要自行准备好k8s集群及rancher平台,部署请看本人其他文章 。 登录到rancher平台后,点击集群管理,…

部署wordpress

查看别名type ll ll 是 ls -l --colorauto 的别名 设置别名alias alias ymyum install -y 使用别名ym nginx 取消别名unalias ym 基于LNMP做一个wordpress nginx mysql 5.7 PHP 7.4 1、linux基本环境 修改主机名 hostnamectl set-hostname $name 关闭防火墙及selinux …

113 如何排查 cpu 过高的业务进程

前言 又是一个面试问题, 呵呵 之前碰到的 一个 java 进程 cpu 占用率过高, 应该如何排查? 对于这种问题, 第一反应就是 jstack, pstack, 然后仔细观察多次堆栈信息结果的 重复率较高的代码 因此 我给出的思路是, 写脚本 多次 jstack 目标进程, 然后 再统计分析一下 出现频…

Stable Diffusion 模型分享:CyberRealistic XL(真实)cyberrealisticXL_v11VAE.safetensors

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八下载地址模型介绍

mybatisPlus数据字段填充

这里用到的时实体类User import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import lombok.…

压缩感知的概述梳理(1)

参考文献 An efficient visually meaningful image compression and encryption scheme based on compressive sensing and dynamic LSB embedding 基本内容 基本关系梳理 压缩感知核心元素 信号 x 长度&#xff1a;N动态稀疏或可用变换表示&#xff1a;x &#x1d74d;s …

如何将低分辨率的视频变高清,使用AI工具分辨率画质增强至1080P、4K或者8K(附工具)

环境&#xff1a; Topaz Video AI 5.0 问题描述&#xff1a; 如何将低分辨率的视频变高清&#xff0c;使用AI工具分辨率画质增强至1080P、4K或者8K 原视频 增强1080P 解决方案&#xff1a; 1.打开软件&#xff0c;导入要处理的视频&#xff08;工具在本文最后附上&#xf…

C 排序算法

冒泡排序 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 过程演示&…

学习笔记------时序约束之时钟周期约束

本文摘自《VIVADO从此开始》高亚军 主时钟周期约束 主时钟&#xff0c;即从FPGA的全局时钟引脚进入的时钟或者由高速收发器输出的时钟。 对于时钟约束&#xff0c;有三个要素描述&#xff1a;时钟源&#xff0c;占空比和时钟周期。 单端时钟输入 这里我们新建一个工程&#x…

芯片灌封胶是什么?有哪些优点?

芯片灌封胶是什么&#xff1f;有哪些优点&#xff1f; 芯片灌封胶是一种液态复合物&#xff0c;通过机械或手工方式精准灌入装有电子元件、线路的器件内&#xff0c;在常温或加热条件下固化成为性能优异的热固性高分子绝缘材料。它广泛应用于电子元器件的粘接、密封、灌封和涂…

微信小程序自定义导航栏定位及胶囊按钮图解

在自定义小程序导航栏时&#xff0c;右上角的胶囊&#xff08;MenuButton&#xff09;在不同机型测试&#xff0c;会发现很难适配。 实测中 不同的手机&#xff0c;胶囊高度不一样、状态栏高度不一样。与模拟器显示的情况是不一样的。 由于小程序在不同的手机上顶部布局会发生…

解锁数据潜能:构建高效数据仓库的策略与实践

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的激增&#xff0c;企业面临着数据管理的诸多挑战。如何有效地利用这些数据&#xff0c;支持企业的决策和运营&#xff0c;成为每个企业都需要解答的问题。数据仓库的建设和数据的合理分层…

B1100 校庆

输入样例&#xff1a; 5 372928196906118710 610481197806202213 440684198612150417 13072819571002001X 150702193604190912 6 530125197901260019 150702193604190912 220221196701020034 610481197806202213 440684198612150417 370205198709275042 输出样例&#xff1a;…

LInux shell编程之基础语法

目录 1、shell概述 1.1、查看Linux 提供的 Shell 解析器 1.2、bash 和 sh 的关系 1.3、查看系统&#xff08;centos&#xff09;默认使用的解释器 2、脚本的基础使用 2.1、脚本的格式 2.2、脚本的执行方式 方式一&#xff1a;采用 bash / sh 脚本的相对路径或绝对路径…