Java学习Day61:薄纱王灵官!(Nginx review)

1.Nginx是什么

Nginx是一款轻量级、高性能,并发性好的HTTP和反向代理服务器

2.功能

2.1反向代理

正向代理是指客户端向代理服务器发送请求,代理服务器代表客户端去访问目标服务器。简单来说,正向代理是客户端的代理,客户端通过代理服务器访问外部资源。

  • 工作原理

    • 客户端通过配置代理服务器的地址和端口,将请求发送到代理服务器。
    • 代理服务器代替客户端发起请求到目标服务器。
    • 目标服务器并不知道客户端的真实身份,知道的只是代理服务器的信息。
  • 应用场景

    • 访问控制:例如,公司或组织会通过正向代理限制员工访问特定的网站或服务。
    • 隐藏客户端 IP 地址:通过正向代理,客户端的 IP 地址被代理服务器的 IP 地址所隐藏。
    • 缓存加速:正向代理可以缓存响应内容,减少重复请求,提高访问速度。

反向代理是指客户端的请求发送到代理服务器,代理服务器再将请求转发到内部的真实服务器。简单来说,反向代理是服务器端的代理,客户端不知道真实的服务器地址,只知道代理服务器的地址。

  • 工作原理

    • 客户端的请求首先到达代理服务器。
    • 代理服务器根据请求内容将请求转发给后端的真实服务器(可以是多个服务器)。
    • 后端服务器处理请求并将响应返回给代理服务器。
    • 代理服务器将响应返回给客户端。
  • 应用场景

    • 负载均衡:Nginx 可以根据不同的负载均衡策略(如轮询、最少连接等)将请求分发到多台后端服务器上,提高服务的可靠性和性能。
    • Web 应用的保护:反向代理隐藏了内部应用的真实地址和结构,增强了安全性。
    • 缓存:Nginx 可以缓存静态内容和 API 响应,减少后端负载,提高访问速度。
    • SSL 终端:Nginx 可以作为 SSL 终端代理,处理所有 SSL/TLS 加密和解密,然后将请求明文转发到后端服务器。

正向代理代理客户端隐藏客户端的地址,反向代理代理服务器隐藏服务器的地址

2.2负载均衡

Nginx通过其内置的upstream模块来实现负载均衡。该模块允许你定义一组后端服务器,并根据一定的策略将客户端请求转发到这些服务器上。Nginx支持多种负载均衡策略,包括轮询、IP哈希、最少连接数等。

2.2.1 轮询(Round Robin)

轮询是Nginx默认的负载均衡策略。它按照定义的服务器列表顺序逐个分配请求,循环往复。适用于服务器性能相当的情况。

upstream myUpstream {server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}
2.2..2 加权轮询(Weighted Round Robin)

根据服务器的权重值分配请求,权重越高的服务器将获得更多的请求。通过给不同服务器设置不同的权重,可以合理分配负载,更好地利用服务器资源。

upstream myUpstream {server backend1.example.com weight=3;server backend2.example.com weight=1;
}server {location / {proxy_pass http://myUpstream;}
}
2.2..3 IP哈希(IP Hash)

根据客户端的IP地址进行哈希计算,将相同IP的请求始终分发到同一台后端服务器上。这样可以保证来自同一客户端的请求都会被发送到同一服务器,适用于需要会话保持或缓存一致性的应用场景。

upstream myUpstream {ip_hash;server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}
2.2..4 最少连接(Least Connections)

该策略将请求发送给当前连接数最少的服务器。通过动态地追踪每个服务器的连接数,将请求分发给连接最少的服务器,以实现负载均衡。适用于处理连接时长不一致的场景,如长连接和短连接混合的情况。

upstream myUpstream {least_conn;server backend1.example.com;server backend2.example.com;
}server {location / {proxy_pass http://myUpstream;}
}
2.2.5 加权最少连接(Weighted Least Connections)

为每台服务器分配权重,并按照最少连接数进行负载均衡

upstream myUpstream {least_conn;server backend1.example.com weight=3;server backend2.example.com weight=1;
}server {location / {proxy_pass http://myUpstream;}
}

2.3动静分离

Nginx动静分离,简单来说,就是动态请求静态请求分开,也可以理解成使用Nginx处理静态页面Tomcat 处理动态页面,动静分离从目前实现角度来讲大致分为两种。

纯粹把静态文件独立成单独的域名,放在独立的服务器上(主流推崇的方案)


动态跟静态文件混合在一起发布,通过Nginx来分开


通过location指定不同的后缀名实现不同的请求转发,也可以通过expires参数设置,使浏览器缓存文件的过期时间,从而减少与服务器之前的请求和流量。(有更新则拉取,没更新则直接拿客户端的缓存

Expires具体含义:给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,也就是所谓的客户端缓存。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires来缓存),假设一下,把这个Expires设置3d,表示在3天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码 200。

2.3.1 动静分离目的

为了加快网站的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,来加快解析速度,提高请求的访问效率,降低原来单个服务器的压力,下面是动静分离的原理图。

3、nginx配置文件nginx.conf组成

1、全局块(Global Block):全局块包含了对整个 Nginx 服务器的全局配置,比如运行 Nginx 的用户、Nginx 的工作进程数、错误日志文件路径等。

#user  nobody;
worker_processes  1;   ###值越大,支持的并发数越大#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;

2、events 块:该块用于配置与网络连接有关的参数,比如最大连接数、每个 worker 进程的最大连接数等。

events {worker_connections  1024;  ###nginx支持的最大连接数
}

3、http 块:http 块包含了针对 HTTP 协议的配置信息,比如 MIME 类型、日志格式、默认的字符编码等。

http {include       mime.types;default_type  application/octet-stream;#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  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;
}

4、server 块:server 块定义了一个虚拟主机的配置,包括监听的端口、域名、SSL 配置等。

server {listen       80;server_name  example.com;location / {root   /usr/share/nginx/html;index  index.html index.htm;}
}

5、location 块:location 块用于匹配请求的 URL,并定义了针对这些 URL 的特定处理方式,比如反向代理、重定向、静态文件服务等。示例:

location /images/ {root   /data;
}

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

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

相关文章

MATLAB用到的矩阵基础知识(矩阵的乘和矩阵的逆)

1. 矩阵乘法 方法: 设第一个矩阵为 A A A,第二个矩阵为 B B B,则 A A A的第一行乘 B B B的第一列,先想乘再相加,作为目标矩阵的一个元素。 前提条件: 所以我们可以看到矩阵相乘的前提条件:第一个矩阵的列数等于第二个矩阵的行数。否则,我们就无法进行行和列的相乘。 最…

Oracle OCP认证考试考点详解082系列22

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 105. 第105题: 题目 解析及答案: 题目翻译: 关于Oracle数据库中的事务请选择两个正确的陈述&#xf…

【ict基础软件赛道】真题-50%openGauss

题目取自赛前测试链接 OpenGauss安装前使用哪个工具检查环境是否符合安装哪个功能不是gs_guc工具提供的opengauss数据库逻辑复制的特点描述正确的是opengauss的全密态数据库等值查询能力描述正确的是哪个不属于ssh客户端工具opengauss三权分立说法正确的是opengauss wdr snapsh…

MDK5(Keil5)工具设置及技巧

设置: 1点击扳手(设置) 2文字设置为GB2312简体 3勾选显示空格 4按一下TAB键移动4个空格 修改keil中数字大小及颜色(增加对比) 勾选全部 1提示结构体 2提示函数参数 3打上几个英文符号后开始提示 4TAB作为填充字符 5打开…

4G模组Air780E对json数据处理的基本方法~

4G模组Air780E在数据传输和处理中扮演着越来越重要的角色。在实际应用中,JSON作为一种轻量级的数据交换格式,被广泛应用于网络数据传输和存储。本文将详细介绍4G模组Air780E对JSON数据处理的基本方法,以帮助开发者更好地利用这一模组进行数据…

学习使用LVGL,依赖官方网址

LVGL Basics — LVGL documentation LVGL基础知识 LVGL是一个开源的图形库,提供创建嵌入式GUI的一切 LVGL数据流 您为每个物理显示面板 创建一个显示器 (lv_display) ,在其上创建屏幕小部件,将小部件添加到这些屏幕上。要处理触摸、鼠标、…

【数据库】组合索引生效规则及索引失效

文章目录 索引演示示例组合索引索引失效 索引演示示例 # 创建表结构 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,FirstName VARCHAR(50),LastName VARCHAR(50),DepartmentID INT,Salary DECIMAL(10, 2),HireDate DATE );# 插入示例数据 INSERT INTO Employees (Empl…

力扣 LeetCode 145. 二叉树的后序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;左右中&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> postorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode ro…

用指针遍历数组

#include<stdio.h> int main() {//定义一个二维数组int arr[3][4] {{1,2,3,4},{2,3,4,5},{3,4,5,6},};//获取二维数组的指针int (*p)[4] arr;//二维数组里存的是一维数组int[4]for (int i 0; i < 3; i){//遍历一维数组for (int j 0; j <4; j){printf("%d &…

[HCTF 2018]Warmup 详细题解

知识点: 目录穿越_文件包含 static静态方法 参数传递引用 mb_strpos函数 mb_substr函数 正文: 页面有一张 滑稽 的表情包,查看一下页面源代码,发现提示 那就访问/source.php 得到源码 <?phphighlight_file(__FILE__);class emmm{public static function checkFil…

从0-1训练自己的数据集实现火焰检测

随着工业、建筑、交通等领域的快速发展,火灾作为一种常见的灾难性事件,对生命财产安全造成了严重威胁。为了提高火灾的预警能力,减少火灾损失,火焰检测技术应运而生,成为火灾监控和预防的有效手段之一。 传统的火灾检测方法,如烟雾探测器、温度传感器等,存在响应时间慢…

小程序20-样式:自适应尺寸单位 rpx

手机设备的宽度逐渐多元化&#xff0c;也就需要开发者开发过程中&#xff0c;去适配不同屏幕宽度的手机&#xff0c;为了解决屏幕适配问题&#xff0c;微信小程序推出了 rpx 单位 rpx&#xff1a;小程序新增的自适应单位&#xff0c;可以根据不同设备的屏幕宽度进行自适应缩放 …

在Ubuntu系统中,默认情况下会安装`apt`作为包管理工具(Advanced Package Tool)

文章目录 方法一&#xff1a;使用命令行检查apt是否存在方法二&#xff1a;尝试运行一个apt命令方法三&#xff1a;查看包列表如果apt没有安装主要功能高级用法注意事项 在Ubuntu系统中&#xff0c;默认情况下会安装 apt作为包管理工具。你可以通过以下几种方法来检查系统中是…

Github 2024-11-16Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Go项目1Python项目1Lapce:用 Rust 编写的极快且强大的代码编辑器 创建周期:2181 天开发语言:Rust协议类型:Apache License 2.0St…

C++:基于红黑树封装map和set

目录 红黑树的修改 红黑树节点 红黑树结构 红黑树的迭代器 红黑树Insert函数 红黑树的默认成员函数 修改后完整的红黑树 set、map的模拟实现 set map 测试封装的set和map 红黑树的修改 想要用红黑树封装map和set&#xff0c;需要对之前实现的key-value红黑树进行修…

LeetCode 3240.最少翻转次数使二进制矩阵回文 II:分类讨论

【LetMeFly】3240.最少翻转次数使二进制矩阵回文 II&#xff1a;分类讨论 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-of-flips-to-make-binary-grid-palindromic-ii/ 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后…

在kile 5中一个新工程的创建

这两天博主学习到了在kile5中创建一个工程&#xff0c;当然博主不会忘了小伙伴们的&#xff0c;这就和你们分享。 本次创建以STM32F103C8为例 创建过程&#xff1a; 1首先创建文件 名字随意&#xff0c;但也不要太随意&#xff0c;因为是外国软件&#xff0c;所以多少对中文…

深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras

引言 在深度学习的世界中&#xff0c;PyTorch、TensorFlow和Keras是最受欢迎的工具和框架&#xff0c;它们为研究者和开发者提供了强大且易于使用的接口。在本文中&#xff0c;我们将深入探索这三个框架&#xff0c;涵盖如何用它们实现经典深度学习模型&#xff0c;并通过代码…

2024-11-16 特殊矩阵的压缩存储

一、数组的存储结构 1.一维数组&#xff1a;各元素大小相同&#xff0c;且物理上连续存放。a[i]起始地址i*siezof(数组元素大小) 2.二维数组&#xff1a;b[j][j]起始地址&#xff08;i*Nj&#xff09;*sizeof(数组元素大小) 二、特殊矩阵 1.普通矩阵的存储&#xff1a;使用…

ISCTF2024

ezlogin 源码审计 先审源码,纯js题 const express require(express); const app express(); const bodyParser require(body-parser); var cookieParser require(cookie-parser); var serialize require(node-serialize); app.use(bodyParser.urlencoded({ e…