Nginx的正向与反向代理
一、Nginx简介
1. 什么是Nginx
Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔·赛索耶夫)为解决C10k问题(即同时处理超过10000个客户端连接)而开发的。它以高性能、稳定性、功能丰富和低资源消耗而闻名。它第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
2. Nginx优点
1)高性能:Nginx能够处理大量的并发连接,且内存消耗相对较低。
2)高稳定性:Nginx以其稳定性而著称,极少出现崩溃的情况。
3)模块化:Nginx支持模块化设计,可以根据需要加载或卸载特定的模块。
4)配置简单:Nginx的配置文件简洁明了,易于理解和维护。
5)跨平台:Nginx可以在多种操作系统上运行,包括Linux、BSD、Mac OS和Windows。
二、正向代理
正向代理(代理客户端),例子:VPN、游戏加速器、公司网络
正向代理通常用于客户端,在客户端配置代理服务器进行指定网站访问,由代理服务器转发请求,返回给客户端,比如国内无法访问谷歌,这个时候我们就可以设置正向代理来访问
正向代理主要作用:
1)访问控制:代理服务器可以控制客户端可以访问哪些网站或服务。
2) 缓存:代理服务器可以缓存请求的结果,提高访问速度。
3)隐私保护:代理服务器可以隐藏客户端的真实IP地址,提供一定程度的匿名性。
4)过滤:代理服务器可以过滤请求和响应,例如屏蔽广告或不适当的内容。
Nginx在正向代理中的配置示例:
...
server {resolver 8.8.8.8;#指定DNS服务器IP地址listen 80;#监听80端口server_name localhost;# 正向代理转发http请求location / {proxy_pass http://$http_host$request_uri;proxy_set_header HOST $host;proxy_buffers 256 4k;proxy_max_temp_file_size 0k;proxy_send_timeout 30;proxy_read_timeout 60;}
}
...
注意:nginx官方并不支持直接转发https请求,nginx支持https需要ngx_http_proxy_connect_module模块
三、反向代理
反向代理(代理服务端),例子:访问百度网址
反向代理是服务端,客户端不需要知道目标服务器的地址,反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的IP地址
反向代理的主要作用:
1)负载均衡:反向代理可以将请求通过负载均衡算法分发到多个后端服务器,平衡负载。
2)缓存:反向代理可以缓存静态内容,减轻后端服务器的负担。
3)SSL加密:反向代理可以管理SSL/TLS加密和证书,简化后端服务器的配置。
4)压缩:反向代理可以对响应进行压缩,提高传输效率。
5)安全:反向代理可以作为额外的安全层,隐藏目标服务器的身份,从而保证内网安全。
Nginx在反向代理中的应用配置示例:
server {listen 80;server_name localhost;location / {proxy_pass http://127.0.0.1:8080;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_pass http://127.0.0.1:8080; 将所有请求转发到本地的8080端口。
proxy_set_header 指令用于确保后端服务器收到正确的客户端请求信息。
附:Nginx配置文件说明
nginx的配置文件结构如下:
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}
通常包含以下几部分:
全局块
├── events
├── http
│ ├── upstream
│ ├── server
│ ├── server
│ │ ├── location
│ │ ├── location
│ │ └── ...
│ └── ...
└── ...
全局块:
全局配置,影响nginx的整体行为,例如定义运行nginx进程的用户(组)、允许打开的文件数、日志文件位置等。比如:
# 全局块
user nginx;
# Nginx 进程的数量
worker_processes 1;# 定义 PID 文件位置
pid /var/run/nginx.pid;# 定义错误日志文件位置
error_log /var/log/nginx/error.log warn;
# 定义访问日志文件位置
access_log /var/log/nginx/access.log main;
events块:
配置与客户端连接的相关参数,如工作连接数、事件处理机制等。
# events 块
events {worker_connections 1024;
}
http块:
定义了所有http服务器的配置指令,包括文件引用、日志定义、http头部信息、MIME-TYPE定义、SSL配置、客户端请求头处理等。
# http 块
http {include /etc/nginx/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 /var/log/nginx/access.log main;# 定义 sendfilesendfile on;# 定义 keepalive 超时时间keepalive_timeout 65;# 包含其他配置文件include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;# server 块server {listen 80;server_name localhost;# 定义 location 块location / {root /usr/share/nginx/html;index index.html index.htm;}# 定义 error_pageerror_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}# 定义 upstream 块upstream backend {server backend1.example.com;server backend2.example.com;}# 定义 map 块map $http_host $backend_pool {backend1.example.com backend1;backend2.example.com backend2;default backend1;}# 使用 upstreamlocation /backend {proxy_pass http://$backend_pool;}}
}
server块:
http 块可以包含多个 server 块,每个 server 块定义了一个虚拟主机。server块定义了服务器级别的配置指令,可以有多个server块,每个块定义了一个虚拟主机。server块可以继承http块的配置。server 块中的配置对特定的虚拟主机有效。server 块可以包含多个 location 块。
location块:
定义了请求的路由和处理方式,用于匹配请求的URI,并定义如何处理匹配的请求
upsteam块:
定义了一组后端服务器,用于负载均衡。upstream块中的配置对特定后端服务器有效。
map块:
可以基于某些请求设置变量的值,map块中的配置对整个nginx服务有效。
include指令:
用于包含其他配置文件。include指令可以出现在全局块、http块或server块中,用于引入其他配置文件。
相关文章:

Nginx的正向与反向代理
一、Nginx简介 1. 什么是Nginx Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔赛索耶夫)为解决C10k问题(即…...

esp8266 at指令链接wifi时一直connect disconnest
那是你的连接wifi的名字密码有误或者热点有问题,看看热点是不是把设备拉入黑名单或者设置为5G或者连了校园网或者设置了最多链接设备...

基于SpringBoot博物馆游客预约系统【附源码】
基于SpringBoot博物馆游客预约系统 效果如下: 主页面 注册界面 展品信息界面 论坛交流界面 后台登陆界面 后台主界面 参观预约界面 留言板界面 研究背景 随着现代社会的快速发展和人们生活水平的提高,文化生活需求也在日益增加。博物馆作为传承文化、…...

【JVM】内存区域划分,类加载的过程,.class文件的格式
一个java写的程序,跑起来就得到了一个java进程,而java进程=JVM上面运行的字节码指令 JVM是「java虚拟机」,负责解释执行java的指令 【JVM内存区域划分】 1.程序计数器(比较小的空间) 作用:保存了下一条…...

esp32-camera入门(基于ESP-IDF)
主要参考资料: ESP32-S2 Kaluga camera lcd 示例入门: https://blog.csdn.net/Marchtwentytwo/article/details/121121028 摄像头应用方案常见问题汇总: https://docs.espressif.com/projects/esp-faq/zh_CN/latest/application-solution/camera-application.html …...

react中类式组件与函数式组件的区别
在React中,类式组件(Class Components)与函数式组件(Functional Components)是两种不同的组件定义方式,它们各有特点,适用于不同的场景。以下是它们之间的主要区别: 一、定义与语法…...

【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…...

【重学 MySQL】五十六、位类型
【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中,位类型(BIT类型)是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值,其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…...

Centos7 NTP客户端
目录 1. NTP客户端1.1 安装1.2 启动1.3 同步状态异常1.4 更改/etc/chrony.conf配置文件1.5 同步状态正常 1. NTP客户端 1.1 安装 如果chrony没有安装,可以使用以下命令安装 sudo yum install chrony1.2 启动 启动并设置开机自启 sudo systemctl start chronyd …...

手机号归属地查询-手机号归属地-手机号归属地-运营商归属地查询-手机号码归属地查询手机号归属地-运营商归属地
手机号归属地查询API接口是一种网络服务接口,允许开发者通过编程方式查询手机号码的注册地信息。关于快证签API接口提供的手机号归属地查询服务,以下是一些关键信息: 一、快证签API接口简介 快证签API接口可能是一个提供多种验证和查询服务…...

CoppeliaSim和Matlab建立远程连接教程
CoppeliaSim和Matlab建立远程连接教程 Matlab通过调用CoppeliaSim的远程API和库函数实现远程连接,为实现Matlab和CoppeliaSim的联合仿真做准备。 一、获取并查看版本信息 点击 Help 查看版本信息 使用的CoppeliaSim Edu版本为:4.4.0 位数:64bit 二、拷贝API函数和库文件…...

使用STS以及签名URL临时授权访问OSS资源
本文介绍JAVA如何使用STS以及签名URL临时授权访问OSS资源。 注意事项 由于STS临时账号以及签名URL均需设置有效时长,当您使用STS临时账号生成签名URL执行相关操作(例如上传、下载文件)时,以最小的有效时长为准。例如您的STS临时账…...

Next.js 14 使用 react-md-editor 编辑器 并更改背景颜色
1.简介 react-md-editor是一款markdown编辑器,本文介绍如何在Next.js中使用它。 2.安装 安装命令: npm install uiw/react-md-editor3.MD编辑器 markdown编辑器的使用: "use client" import MDEditor from uiw/react-md-edi…...

【Iceberg分析】Spark与Iceberg集成落地实践(一)
Spark与Iceberg集成落地实践(一) 文章目录 Spark与Iceberg集成落地实践(一)清理快照与元数据配置表维度自动清理元数据文件属性手动清理 清理孤岛文件合并数据文件 清理快照与元数据 配置表维度自动清理元数据文件属性 每一次写…...

【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL45
异步FIFO 描述 请根据题目中给出的双口RAM代码和接口描述,实现异步FIFO,要求FIFO位宽和深度参数化可配置。 电路的接口如下图所示。 双口RAM端口说明: 端口名 I/O 描述 wclk input 写数据时钟 wenc input 写使能 waddr input 写…...

【强训笔记】day27
NO.1 代码实现: #include<iostream>using namespace std;int n,m; int main() {cin>>n>>m;long long retn;for(int i0;i<m-1;i)retret*(n-1)%109;cout<<ret<<endl;return 0; }NO.2 思路:bfs遍历实现,dis…...

Nginx06-静态资源部署
零、文章目录 Nginx06-静态资源部署 1、静态资源概述 静态资源:是在Web开发中不经常改变的文件,比如图片、CSS样式表、JavaScript脚本文件等。这些资源通常是预先编译好的,不需要服务器端的动态处理。动态资源:是在Web开发中需…...

MySQL数据库专栏(二)SQL语句基础操作
目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 数据表操作 数据表数据类型 数据表列约束 数据表索引 创建表 查看表 查看表结构 删除表 数据表的增删改操作 …...

【OpenCV 实战】1.手势虚拟拖拽(双手骨骼点识别)
step: 1.opencv 获取视频流 2.在画面上画一个方块 3.通过mediapipe获取手指关键点坐标 4.判断手指是否在方块上 5.若在方块上,方块跟着手指移动 mediapipe网站介绍:Hands - mediapipe (chuoling.github.io) 已上传到GitHub : plumqm/OpenC…...

基于springboot人力资源管理系统源码
项目技术:SpringBoot 运行环境:jdk1.8idea/eclipsemaven3mysql5.6 项目描述: 系统包括,员工管理,奖惩管理,合同管理,薪酬管理,培训管理,绩效评估等功能...

如何使用 Apt-Get 和 Apt-Cache 在 Ubuntu 和 Debian 中管理软件包
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Apt 是 dpkg 打包系统的命令行前端,也是许多发行版中管理软件的首选方式。它是 Debian 及基于 Debian 的 Linux 发行版…...

Linux系统创建新分区并挂载的方法
一、引言 本文以CentOS为例讲述Linux系统创建新分区并挂载的方法。如下图所示,用fdisk -l命令可以看到该CentOS系统下有一个磁盘/dev/vda,其容量为2199G,即2T。该磁盘有两个分区:vda1和vda2: 用lsblk命令可以查看到磁…...

反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计
目录 引言 设计思路: 代码实现: 标注注解:@StrategyClass 扫描注解:trategyScan 注册器抽象类: 动态策略注册类: AOP类: 总结: 引言 曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现? 将…...

【Xcode Command Line Tools】安装指南
安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools...

springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数
springboot开发网站-使用redis数据库定时特征限制指定ip的访问次数。近期网站经常有人恶意访问,提交了很多垃圾信息。为了屏蔽这类灌水帖,打算屏蔽ip地址,限制24小时内只能访问1次某个接口。下面是测试的案例代码内容。 1:首先&am…...

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记
本文所要介绍的一本书《Neural Networks and Deep Learning》,该书作者Michael Nielsen,Y Combinator Research的研究员,是多年之前自己看的一本基础书籍,很适合入门了解一些关于深度学习的概念知识,当然也包含了一些小…...

CSS 圆形边框与阴影
目录 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影 1. 圆角边框 1.1 正圆 1.2 圆角矩形 1.3 任意圆角 1.4 某个圆角 2. 盒子阴影 3. 文字阴影...

Bianchi模型、python计算及ns3验证
由于项目与学习需要,最近学习了bianchi模型,并在python中进行了公式->代码的转化,仿真结果与ns3结果对比。 本文更多的是理解模型各个部分的含义、把各个简单的推导过程转化为python、ns3对比: 1 理论吞吐与传输概率、传输成功概率、包长、速率、排队时间、成功传输时…...

SQL常用语法
SQL(Structured Query Language)是一种用于存储、操作和检索数据库中数据的标准编程语言。以下是一些常用的 SQL 语法: 数据库操作 创建数据库:CREATE DATABASE database_name;删除数据库:DROP DATABASE database_name…...

计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...