Ngin入门套餐

news2024/11/24 11:43:26

快速了解Nginx

  • 一、代理
    • 1.1 正向代理
    • 1.2 反向代理
    • 1.3 正向代理和反向代理的区别
  • 二、Nginx负载均衡策略
    • 2.1 轮询(Round Robin)
    • 2.2 加权轮询(Weighted Round Robin)
    • 2.3 IP 哈希(IP Hash)
    • 2.4 最少连接(Least Connections)
    • 2.5 随机(Random)
  • 三、动静分离
  • 四、配置文件解析

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。

特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

一、代理

1.1 正向代理

正向代理是一种网络代理模式,代理服务器位于客户端和目标服务器之间。它的主要功能是接受客户端请求,并将这些请求转发到目标服务器,然后将响应返回给客户端。正向代理通常用于实现访问控制、隐私保护、缓存等功能。
在这里插入图片描述
工作原理:

  1. 客户端请求:客户端(例如浏览器)向正向代理服务器发送请求,而不是直接请求目标服务器。
  2. 代理处理请求:正向代理接收到请求后,会将其转发到目标服务器。这时,目标服务器并不知道是哪个客户端在请求。
  3. 目标服务器响应:目标服务器将响应发送回正向代理服务器。
  4. 代理服务器返回响应:正向代理接收到从目标服务器返回的响应,并将其转发给客户端。

应用场景:

  1. 访问控制,通过设置代理服务器规则实现外来请求是否能够访问目标服务器。
  2. 匿名访问,代理服务器作为访问中介,双方都只知道代理服务器的 ip 信息。
  3. 加速访问,代理服务器能够缓存常见请求的响应,减少通信延迟,提高访问速度。
  4. 跨地域访问,有些内容会因为地域限制而无法访问,用户可以通过正向代理伪装成其他地区的用户来访问被限制的内容。

1.2 反向代理

反向代理是一种服务器配置,它可以接收客户端的请求,并将这些请求转发到后端的一个或多个服务器上。反向代理通常用于负载均衡、安全性、缓存等目的。
在这里插入图片描述
工作原理:

  1. 客户端请求:客户端(如用户的浏览器)发送一个HTTP请求,请求的数据可能是网页、图像或其他资源。
  2. 到达反向代理服务器:请求首先到达反向代理服务器,而不是直接到达后端应用服务器。
  3. 请求转发:反向代理服务器根据配置的规则,决定将请求转发到哪一台后端服务器。这些规则可以基于URL路径、负载均衡策略等。
  4. 后端处理:被选中的后端服务器接收到请求并进行处理。这可能涉及查询数据库、计算、调用其他服务等。
  5. 返回响应:后端服务器完成请求处理后,将相应的数据(如HTML页面、JSON 数据、文件等)返回给反向代理服务器。
  6. 响应转发给客户端:反向代理服务器接收到后端服务器的响应后,可能会对其进行缓存、修改或记录日志,然后再将响应发送回客户端。
  7. 客户端接收响应:客户端最终收到来自反向代理服务器的响应,呈现给用户。

应用场景:

  1. 负载均衡,反向代理可以将客户端请求分发到多个后端服务器,从而实现负载均衡。这种方法可以提高系统的可用性和性能,确保没有单一服务器过载。
  2. SSL/TLS终止,反向代理可以处理HTTPS请求,为后端服务器减轻了SSL/TLS加密和解密的负担。通过集中管理证书,使得更新和维护变得更加简单。
  3. 安全防护,使用反向代理可以隐藏后端服务器的真实地址,提供额外的安全层。它可以过滤恶意请求、进行身份验证或防止DDoS攻击等。
  4. 跨跨域资源共享(CORS),在某些情况下,反向代理可以用于解决跨域请求的问题。通过设置适当的HTTP头,允许特定源访问后端资源。
  5. 微服务架构,在微服务架构中,反向代理可以帮助路由请求到不同的服务。它也可以充当API网关,统一管理所有的API请求。

1.3 正向代理和反向代理的区别

正向代理是客户端互联网之间的中介。客户端通过正向代理访问其他网站或服务,而不是直接访问目标服务器。

客户端在访问互联网时,使用正向代理服务器作为请求的发起端,这样目标服务器就无法识别到客户端的真实IP信息,对客户端的身份起到一定的保护作用。


反向代理是位于客户端一组后端服务器之间的中间层。客户端向反向代理发送请求,而反向代理将请求转发给适当的后端服务器。

客户端在访问后端服务器时,访问的并不是真实的后端服务器地址,而是反向代理服务器,所有的服务访问都通过反向代理服务进行范围,由其进行转发。这样后端服务器架构就能够被很好的保护起来。

反向代理和正向代理的主要区别在于它们的工作方向及其角色定位,而不是仅仅依赖于请求的发起者(客户端或后端服务器)。

正向代理代理的是客户端,反向代理代理的是服务器端。

二、Nginx负载均衡策略

为了让资源更多的服务器接收到更多的访问请求,让每台服务器能够利用好自身的资源。 Nginx 提供了多种负载均衡策略,可以根据不同的需求和场景选择合适的策略。

2.1 轮询(Round Robin)

这是 Nginx 的默认负载均衡方法。请求按照顺序分配给后端服务器,即第一个请求发送给第一台服务器,第二个请求发送给第二台,以此类推。如果有多个请求并发到达,则会循环遍历后端服务器。
在这里插入图片描述

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

适用于无状态的访问请求,即没有保留相关数据在目标服务器上的访问请求,如果请求存在状态保存在目标服务器,那么下次访问时可能相应的不是上次的服务器,导致状态丢失。

2.2 加权轮询(Weighted Round Robin)

与简单的轮询类似,指定轮询几率,weight和访问比率成正比,但每台后端服务器可以被分配不同的权重。权重越高,被分配到请求的概率就越大。这对于性能差异较大的服务器特别有效。
在这里插入图片描述

upstream backend {
    server backend1.example.com weight=3 down;  # 权重为3
    server backend2.example.com weight=2 backup;  # 权重为2
    server backend3.example.com weight=1;  # 权重为1
}

down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

2.3 IP 哈希(IP Hash)

这种方法使用客户端的 IP 地址计算哈希值,将请求总是分配给同一台后端服务器。这样可以保证相同用户的请求始终落在同一服务器上,可以解决session不共享的问题,适合需要会话保持的场景(如购物车应用)。
在这里插入图片描述

IPHash的轮询方式确实能解决Session问题,但是考虑到服务器可能存在宕掉的风险导致数据丢失,因此一般采用Redis对Session进行共享。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

2.4 最少连接(Least Connections)

策略将请求路由到当前连接数最少的后端服务器。这对于处理长连接或高延迟请求非常有效,因为它可以确保负载在所有服务器之间尽可能均匀分配。

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

2.5 随机(Random)

这个策略随机选择一台后端服务器来处理请求。这种方式可以在负载相对均衡的情况下减轻某些特定服务器的压力。

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    # 配置随机负载均衡
    # 注意:Nginx 默认没有提供随机算法,需要使用第三方模块
}

三、动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。

让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

静态内容:如 HTML 文件、CSS 文件、JavaScript 文件、图片等,这些资源不需要服务器端处理,可以直接由 Nginx 提供。
动态内容:如 PHP、Python、Node.js 等,通过后端应用程序生成的内容,这些内容通常需要 web 应用服务器进行处理。

在这里插入图片描述
文件配置:

server {
 	# 静态文件配置
 	当URL为/时,提供静态文件/var/www/html/index.html供访问
    location / {
        root /var/www/html;  # 指向静态文件目录
        index index.html index.htm;
        try_files $uri $uri/ =404;  # 如果文件不存在,返回 404
    }
    
    # 针对特定目录的静态文件处理
    当访问URL为/static/XX时,根据下边配置的静态资源文件夹中的文件提供访问
    location /static/ {
        alias /var/www/static/;  # 指向静态资源文件夹
    }
    # 动态内容处理(例如 PHP)
    location ~ \.php$ { #此处是可以使用正则表达式的
        include snippets/fastcgi-php.conf;  # 引入 FastCGI 配置
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # PHP-FPM 的 socket 地址
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;  # 包含 FastCGI 参数
    }
}

静态内容处理:
/ 路径下的请求会被直接处理为静态文件。如果请求的文件存在,则返回该文件;否则返回 404 错误。
/static/ 路径用于处理静态文件,使用 alias 指令将 URI 映射到实际文件系统的位置。

动态内容处理:
使用正则表达式匹配以 .php 结尾的请求,并通过 fastcgi_pass 将请求转发给 PHP-FPM(FastCGI Process Manager),以便处理 PHP 文件。
对于其他动态请求(如 API 请求),我们通过 proxy_pass 将请求代理到 Node.js 应用程序或其他后端服务。

具体可以看下边的配置文件解析哈

四、配置文件解析

#全局配置
user  www-data; #指定运行 Nginx 工作进程的用户和组,通常选择一个权限较低的用户(如 www-data)以增强安全性。
worker_processes  auto; #设置工作进程的数量。使用 auto 可以根据系统的 CPU 核心数自动调整,通常建议设置为 CPU 核心数,以提高性能。

#错误日志配置 # 
error_log  /var/log/nginx/error.log warn; #配置错误日志的路径及其日志级别,级别包括 debug, info, notice, warn, error, crit, alert, emerg
pid        /var/run/nginx.pid; #指定存放 Nginx 主进程 PID(进程标识符)的文件路径。

#处理事件配置
events {
    worker_connections  1024;  #表示每个工作进程能够同时处理的最大连接数
}

#定义上游服务器,用于负载均衡
upstream backend { #此处的backend名称可用于下边的server调用
        # 定义后端服务器
        server backend1.example.com;  # 服务器 1
        server backend2.example.com;  # 服务器 2
        server 192.168.1.100:8080;    # 服务器 3(IP 地址)
        # 可以指定权重,数字越大表示优先级越高
        server backend3.example.com weight=3;  # 权重为 3
}

#网络请求配置
http {
    include       mime.types;  	t-Type。
    default_type  application/octet-stream; #未明确指定类型时使用的默认 MIME 类型。

    #访问日志的格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main; #设置访问日志的存放路径和使用的日志格式。此处使用前面定义的 main 格式。

    sendfile        on;  # 启用高效的文件传输方式,将文件从磁盘直接发送到网络,而无需经过用户空间,减少 CPU 占用率,提高性能。
    tcp_nopush     on;  # 在发送大文件时,尽可能将数据一起发送,减少 TCP 分段,提高效率。
    tcp_nodelay    on;  # 禁用 Nagle 算法,以便尽快发送小的数据包,适用于交互型应用。
    keepalive_timeout  65;  #  设置 HTTP Keep-Alive 连接的超时时间,单位为秒。即在这段时间内,如果没有新的请求,则连接会被关闭。

    #GZip压缩设置
    gzip  on; #开启 Gzip 压缩功能,可以减小传输的数据量,提高加载速度。
    gzip_types text/plain application/json application/javascript text/css application/xml text/xml application/xhtml+xml; #指定哪些 MIME 类型的响应内容应进行 Gzip 压缩。
    gzip_min_length  1000; #指定 Gzip 压缩的最小响应体长度,只有当响应体长度超过该值时,才会进行压缩。

	#服务器访问设置
    server {
        listen       80;  #指定Nginx监听的 IP 地址和端口号,80 表示监听 HTTP 请求。
        server_name  localhost;  #定义服务器的名称,通常是域名或 IP 地址。当多个虚拟主机存在时,用于匹配请求的主机名。

		#用于定义如何处理特定 URI 的请求,可以根据请求的 URI 路径进行不同的处理。
        location / {
            root   /var/www/html;  #定义文档根目录,Nginx 将从该目录提供静态文件。
            index  index.html index.htm;  #定义默认的索引文件,例如 index.html 或 index.htm,当请求目录时会返回这些文件(/var/www/html/index.html)。
			try_files $uri $uri/ =404; #如果文件不存在,返回 404
        }

		#提供静态文件配置
		location /static/ {
        alias /var/www/static/;  #将 URI 映射到实际文件系统的位置。
		}

        error_page  404  /404.html; #定义特定错误代码(如 404)的定制错误页面,可用于改善用户体验。

		#当访问URL等于/404.html时,internal用于标记该位置块为内部重定向使用。
        location = /404.html {
            internal; #它不能直接通过 HTTP 请求访问。例如,如果用户在浏览器中直接访问 /404.html,Nginx 将返回 404 错误,而不是显示该页面。
        }

        #指定以 /api/ 开头的请求的处理方式,这里使用了反向代理。
        location /api/ { #当URL为 Nginx服务器:80/api 时触发反向代理
            proxy_pass http://127.0.0.1:3000;  #将请求转发到指定的后端服务器,通常用于将负载分发到应用程序服务器。
            proxy_set_header Host $host; #设置代理请求中的 HTTP 头部信息,用于传递原始请求的信息,例如请求头部的 Host 和用户的真实 IP 地址。
            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;
        }

		#指定以 /server/ 开头的请求的处理方式。
        location /server/ { #当URL为 Nginx服务器:80/server 时触发负载均衡
            proxy_pass http://backend;  # 将请求转发到定义的 upstream, 即按照预定的规则(轮询,权重,随机等)转发到定义的集群中的对应节点
            proxy_set_header Host $host;  # 传递主机头信息
            proxy_set_header X-Real-IP $remote_addr;  # 传递真实用户 IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递 X-Forwarded-For 头
        }
    }
}


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

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

相关文章

C语言 | Leetcode C语言题解之第462题最小操作次数使数组元素相等II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partition(int *nums, int left, int right) {int x nums[right], i left - 1;for (int j left; j < right; j) {if (nums[j] < x) {swap(…

Spring17——Spring事务简介、使用事务实现模拟转账业务

38-Spring事务简介 相关概念 事务作用&#xff1a;在数据层保障一系列的数据库操作同成功同失败Spring事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同时成功或同时失败 数据层有事务我们可以理解&#xff0c;为什么业务层也需要处理事务呢&#xff1f;举个简…

黑马点评(更新中)

黑马点评 1、短信登录 Session实现1.1 分析1.2、Session实现的缺点1.3、其中的问题1.3.1、session覆盖1.3.2、在拦截之后remove User的作用 2、用Redis实现短信登录2.1 分析2.2 代码以及问题2.2.1 String问题2.2.2 刷新问题2.2.3 注入对象问题2.2.4 拦截器order问题 3、缓存3.1…

6个设计师都在用的样机素材网站

设计师都在哪里找样机素材&#xff1f;推荐6个样机素材网站&#xff0c;免费下载&#xff0c;赶紧收藏好&#xff01; 1、菜鸟图库 样机图片素材-样机图片模板免费下载 - 菜鸟图库 菜鸟图库有多种类型的设计素材&#xff0c;像平面、电商、UI、办公等素材这里面都能找到&#…

若依-二级页面的跳转设计

配置二级路由页面&#xff0c;就是点击了某个按钮之后会跳转到一个页面中去&#xff0c;比如需要点击查看详情的时候就可以进行页面的跳转。 点击字典类型 进入到字典数据页面。这个页面在左侧是没有的&#xff0c;在导航栏会有展示出来。 在index.js中配置的代码 //path 当前的…

从新手到专家,Tableau Agent 如何满足不同用户的分析需求?

为什么要构建 Tableau Agent&#xff1f;Tableau 对话式 AI 助理如何助你加速分析&#xff1f; 正在查询相关数据和现有仪表板&#xff0c;看看能否解答业务问题&#xff1f; 还在持续准备、管理和编辑数据&#xff0c;以确保企业数据的质量和可访问性&#xff1f; 希望快速创…

SDH8323非隔离12V/15V/18V,300MA直插DIP7电源芯片

SDH8323 是高压启动&#xff0c;内置高压MOSFET的电流模式PWMPFM控制器&#xff0c;适用于Buck及Buck-Boost拓扑。 SDH8323 在轻载条件下降频工作&#xff0c;优化轻载条件下的转换效率。在极轻载及空载条件下工作于打嗝模式&#xff0c;从而有效地降低系统的待机功耗。 SDH832…

DIFY上使用多种大语言模型(MindCraft API)

注册MindCraft并创建API KEY 首先我们在智匠MindCraft上注册账号并创建API KEY&#xff0c;参考接口调用文档&#xff0c;查看我们能调用哪些模型。我们可以看到这个开发平台上整合了主流的大语言模型&#xff0c;并且是兼容openai接口的。 进入DIFY的设置界面 然后我们在DIFY上…

为何一个简单的线上商城 两年销售7000多万?

有一个销售百货的商城&#xff0c;他们的返现模式极为独特且富有吸引力。无论你消费多少&#xff0c;商城都会随机给你返还一定金额的钱&#xff0c;这个返还范围从10元到1000元不等&#xff0c;确实非常随意。 那么&#xff0c;这个商城采用如此随性的返现模式&#xff0c;业绩…

软件性能测试有哪些测试指标?性能测试第三方软件测评中心推荐

作为衡量软件质量的重要指标之一&#xff0c;软件的性能是一种非功能特性&#xff0c;不关心系统是否可以完成特定的功能&#xff0c;而只关心软件系统在运行时的速度是否足够快、是否消耗足够少的资源&#xff0c;因此软件性能测试至关重要。性能测试是指软件测试人员根据产品…

监控台操作台在哪些企业中应用比较广泛

在现代企业管理中&#xff0c;监控台操作台作为一种集成了视频监控、音频监听、数据分析及远程控制等多种功能的综合性操作平台&#xff0c;正逐渐成为众多企业不可或缺的重要设备。其广泛的应用领域不仅提升了企业的运营效率&#xff0c;还极大地增强了企业的安全性能。 一、安…

淘宝程序员没活硬整?在 Excel 和 VSCode 中购物!

大家好&#xff0c;我是程序员鱼皮&#xff0c;最近某宝网站的改进&#xff0c;属实是有点 “新” 了。 你敢相信这是一个购物网站么&#xff1f; 你可以在 Excel 表格中挑选商品进行购物&#xff0c;还原度极高&#xff0c;这两个图表更是点睛之笔。哪个天才想出来的&#xf…

C++Linux项目推荐-Web多人聊天+MySQL+Redis+Websocket+Json,可以写简历的C++项目

1 项目地址 项目配套视频简介&#xff1a;程序员老廖的个人空间-程序员老廖个人主页-哔哩哔哩视频 (bilibili.com) 1.1 项目原有功能 https://github.com/anarthal/servertech-chat.git 功能&#xff1a; 支持HTTP请求&#xff0c;掌握HTTP API json的请求相应 支持Webso…

如何使用ssm实现疫情居家办公OA系统

TOC 10902ssm疫情居家办公OA系统 系统概述 进过系统的分析后&#xff0c;就开始记性系统的设计&#xff0c;系统设计包含总体设计和详细设计。总体设计只是一个大体的设计&#xff0c;经过了总体设计&#xff0c;我们能够划分出系统的一些东西&#xff0c;例如文件、文档、数…

手机怎么玩荒野大镖客2?GameViewer远程助你手机随时随地畅玩大表哥2

手机免费玩电脑游戏&#xff0c;原来手机也能随时随地玩荒野大镖客2&#xff1f;如果你想你手机随时随地畅玩大表哥2&#xff0c;可以使用网易GameViewer远程来实现。 GameViewer远程4K蓝光144帧的高画质&#xff0c;可以让你在玩荒野大镖客2时&#xff0c;体验到开放大世界的所…

2024年11月软考准考证什么时候打印?

打印时间一览表&#xff1a; 北京&#xff1a;2024年11月5日至11月8日 上海&#xff1a;2024年11月6日10:00至11月8日16:00 天津&#xff1a;2024年11月5日9:00后 重庆&#xff1a;2024年11月4日9:00至10日9:05 广东&#xff1a;2024年11月5日9:00至8日17:00 深圳&#xf…

靠“代工+营销”支撑,又突击分红10亿元,毛戈平冲刺上市为哪般

撰稿|行星 来源|贝多财经 10月9日&#xff0c;毛戈平化妆品股份有限公司&#xff08;下称“毛戈平”或“毛戈平公司”&#xff09;在港交所更新招股书&#xff0c;继续推进港股上市进程。此前&#xff0c;毛戈平曾于4月8日向港交所递表&#xff0c;但因财务资料已过有效期而“…

selenium:Select类操作复选框和下拉框(7)

复选框/下拉框操作的Select类 主要使用selinium中的类Select来模拟选择网页上的下拉框或者复选框中的内容&#xff0c;使用前先导入 from selenium.webdriver.support.ui import Select 主要方法如下&#xff1a; 函数 功能 select_by_value 根据复选框/下拉框的值选择 se…

openfeign解释及其应用

文章目录 前言一、FeignClient详解注解使用范围注解属性说明value()name()contextId()qualifiers()configurationfallbackfallbackFactorypath 二、openfeign走网关gateway 前言 本文讨论的是springcloud分布式微服务架构下&#xff0c;如何让openfeign请求也走gateway网关 本…

浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)

文章目录 简介Chrome已阻止不安全内容下载PDF直接打开txt、xml、js文件被自动打开了而不是下载阿里OSS设置response header阿里OSS修改metadata 简介 随着浏览器的发展&#xff0c;有很多安全方面的限制&#xff0c;对我们的文件下载行为产生了很大的影响。 在JavaScript下载…