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 项目描述: 系统包括,员工管理,奖惩管理,合同管理,薪酬管理,培训管理,绩效评估等功能...
【ElevenLabs情绪语音实战指南】:3步解锁开心语音API调用、情感强度微调与合规避坑全链路
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs开心情绪语音技术全景概览 核心技术能力 ElevenLabs 的开心情绪语音生成并非简单音调拉升或语速加快,而是基于多任务情感条件建模(Multi-Task Emotional Conditionin…...
基于Magisk挂载机制的Android HTTPS流量监控完整技术方案
基于Magisk挂载机制的Android HTTPS流量监控完整技术方案 【免费下载链接】httpcanary-magisk 项目地址: https://gitcode.com/gh_mirrors/ht/httpcanary-magisk 现代Android系统安全架构的演进为应用开发者带来了新的技术挑战,特别是在HTTPS流量监控领域。…...
用普通光耦TLP521-2实现宽范围线性隔离?一个低成本替代线性光耦的电路设计与实测
用普通光耦TLP521-2实现宽范围线性隔离的工程实践 在工业传感器接口和模拟信号采集领域,信号隔离是确保系统稳定性和安全性的关键技术。传统专用线性光耦(如LOC系列)虽性能优异,但高昂的成本和有限的线性输出范围(通常…...
Ubuntu Apache WebDAV 服务部署与多用户自动化管理
1. WebDAV服务基础认知与场景价值 第一次听说WebDAV这个词时,我也是一头雾水——这串字母组合看起来像某种神秘协议。直到有次团队需要共享设计素材库,才发现这个1996年就诞生的老协议,在云存储时代依然散发着独特魅力。简单来说,…...
终极NDS游戏资源提取器:Tinke如何让你免费解锁任天堂DS游戏文件
终极NDS游戏资源提取器:Tinke如何让你免费解锁任天堂DS游戏文件 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 你是否曾经好奇过任天堂DS游戏中的精美图像、动听音乐和独特字体是如何…...
Spring AI完整学习路线:从Java开发到AI Agent的进阶之路(附15篇实战教程)
🔥 Java开发者必看!Spring AI完整学习路线:从CRUD到AI Agent的蜕变之路(2026终极指南) 作者:12年OTA公司资深程序员 技术栈:Spring Boot 3.5.9 Spring AI 1.1.4 Reactor 多模型集成 阅读时间…...
别再被CUDA版本搞懵了!PyTorch环境配置保姆级避坑指南(含conda与本地安装对比)
深度学习环境配置终极指南:PyTorch与CUDA版本匹配的实战解决方案 1. 理解CUDA与PyTorch版本冲突的本质 当你第一次在终端看到"RuntimeError: The detected CUDA version mismatches the version that was used to compile PyTorch"这个错误时,…...
Claude代码系统提示词:提升AI编程效率的工程化实践
1. 项目概述与核心价值最近在AI编程辅助领域,一个名为“Piebald-AI/claude-code-system-prompts”的项目在开发者社区里引起了不小的讨论。简单来说,这是一个专门为Claude(特别是Claude 3系列模型)设计的、用于提升代码生成与编程…...
WinDirStat:Windows磁盘空间分析与清理的终极解决方案
WinDirStat:Windows磁盘空间分析与清理的终极解决方案 【免费下载链接】windirstat WinDirStat is a disk usage statistics viewer and cleanup tool for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/wi/windirstat WinDirStat是一款专为W…...
ROS Melodic下UVC摄像头花屏?手把手教你修改usb_cam的pixel_format参数
ROS Melodic下UVC摄像头花屏问题深度解析与实战解决方案 当你在ROS Melodic环境下兴奋地插上UVC摄像头,准备开始你的机器人视觉项目时,突然发现屏幕上显示的是一堆杂乱无章的颜色块——这种"花屏"现象让许多ROS新手感到挫败。本文将带你深入理…...
