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块中,用于引入其他配置文件。

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

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

相关文章

下一代安全:融合网络和物理策略以实现最佳保护

在当今快速发展的技术环境中,网络和物理安全融合变得比以往任何时候都更加重要。随着物联网 (IoT) 和工业物联网 (IIoT) 的兴起,组织在保护数字和物理资产方面面临着独特的挑战。 本文探讨了安全融合的概念、说明其重要性的实际事件以及整合网络和物理安…

RNN心脏病预测

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 前期准备 1.数据导入 import pandas as pd from keras.optimizers import Adam from matplotlib import pyplot as plt from sklearn.model_selection import train_test_split from sklearn.p…

构建高效互通的数字桥梁:香港服务器托管指南

在当今全球化日益加深的商业环境中,出海企业面临着前所未有的机遇与挑战。为了确保国内外业务的顺畅运行,特别是在实现国内外数据高效互通、低延迟访问方面,选择一家合适的香港服务器机房进行托管成为了许多企业的关键决策之一。香港&#xf…

网络协议——IP协议

一、IPv4 1、IPv4:TCP/IP协议规定,IPv4地址使用32位的二进制表示,也就是4个字节,为了方便使用,IPv4地址被写成十进制形式,中间用”.”分开。 【点分十进制表示法】 2、IPv4地址分类 2.1 私有地址在互联网…

基于DSP+ARM+FPGA的电能质量分析仪的软件设计

软件设计是电能质量设备的核心内容,上述章节详细介绍了电能质量参数的 算法,并且通过仿真实验进行了验证,本章将结合现代电能质量监测设备需求实 现算法在实际电网中应用。根据设计的电能质量分析仪的需求分析,进行总体的 软件…

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏

英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市,该系列专注于每瓦性能,比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU(…

【笔记】自动驾驶预测与决策规划_Part5_决策过程(上)

决策过程 0. 前言1.决策过程的引入1.1有了planning,为什么还需要decision-making?1.2 决策规划的一些思考 2.马尔可夫决策过程及其关键要素2.1 马尔可夫过程2.1.1 什么是随机过程?2.1.2 什么是马尔科夫性?2.1.3 马尔可夫决策过程 …

从commit校验失效问题探究husky原理

一、背景 之前创建的项目,发现代码 commit 提交的时候没有了任何校验,具体表现: 一是 feat fix 等主题格式校验没有了二是代码 lint 不通过也能提交 尝试解决这个问题,并深入了解husky的实现原理,将相关的一些知识点…

PMP--冲刺题--解题--161-170

文章目录 4.整合管理--1.制定项目章程--当各方的认知、理解、掌握的信息不一致的时候,相对最好的方法就是共同确认项目相关文件/计划中的具体内容(是否项目真的存在这个交付物)。161、 [单选] 在一个与高级经理的项目状态会议中,项…

动态规划-路径问题——931.下降路径最小和

1.题目解析 题目来源:931.下降路径最小和——力扣 测试用例 2.算法原理 1.状态表示 我们可以开辟一个dp表,多开辟一行两列用来存储虚拟位置,dp[i][j]表示从第一行到该位置的最小路径和 2.状态转移方程 由于要找到最小路径和,并且由…

springboot将logback替换成log4j2

一 为何要替换成log4j2 1.1 log4j2的优点 log4j2使用了两种方式记录日志:AsyncAppender和AsyncLogger。 1.AsyncAppender使用队列异步记录日志,但是一旦队列已满,appender线程需要等待。2.AsyncLogger是采用Disruptor,通过环形…

Android Framework AMS(05)startActivity分析-2(ActivityThread启动到Activity拉起)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要解读AMS通过startActivity启动Activity的整个流程的整个流程的第二阶段:从ActivityThread启动到Activity拉起。 第一阶段文…

【Unity精品源码】打造甜蜜的三消游戏:Candy Match 3 Kit

最近总熬夜,肝不好,大家都叫我小心肝。 📂 Unity 开发资源汇总 | 插件 | 模型 | 源码 💓 欢迎访问 Unity 打怪升级大本营 在游戏开发的世界中,三消游戏以其简单易上手、趣味性强的特点,一直深受玩家喜爱。…

【HTTPS】深入解析 https

我的主页:2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的,可能会出现运营商劫持等安全问题,运营商通过劫持 http 流量,篡改返回的网页内容,例如广告业务,可能会通过 Referer 字段 来统计是…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式(主流)‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 5.1. 互斥锁实现 5.1.1…

Elasticsearch学习笔记(五)Elastic stack安全配置二

一、手动配置http层SSL 通过前面的配置,我们为集群传输层手动配置了TLS,集群内部节点之间的通信使用手动配置的证书进行加密,但是集群与外部客户端的http层目前还是使用的自动配置,集群中HTTP的通信目前仍然使用自动生成的证书ht…

SQL Injection | MySQL 数据库概述

关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客 0x01:MySQL 数据库简介 MySQL 是一个流行的关系型数据库管理系统(RDBMS),它基于 SQL (Structured Query Language)进行操作。My…

Python库matplotlib之六

Python库matplotlib之六 动画FuncAnimation构造器成员函数应用例子 动画 Matplotlib基于其绘图功能,还提供了一个使用动画模块,生成动画的接口。动画是一系列帧,其中每个帧对应于图形上的一个图。 Matplotlib使用两个类来实现动画&#xff…

Backend - MySQL Server、HeidiSQL

目录 一、MySQL Server (一)官网下载 (二)安装与配置 二、HeidiSQL软件 (一)安装 1. 官网下载 2. 打开 3. 使用 (1)打开服务 (2)新增数据库 ​&#xff…

python networkx 计算路径A*

import matplotlib.pyplot as plt # 导入 Matplotlib 工具包 import networkx as nx # 导入 NetworkX 工具包 from typing import List# 初始化空的无向图 graph nx.Graph() # 向图中添加多条赋权边: (node1,node2,weight) graph.add_weighted_edges_from([(1, 2, 50),(1, 3…