Nginx反向代理概述

news2024/11/15 5:01:21

正向代理与反向代理概述

正向代理:
定义:正向代理位于客户端和目标服务器之间,客户端的请求首先发送到代理服务器,然后由代理服务器转发到目标服务器,最后将目标服务器的响应返回给客户端。
作用:正向代理可以隐藏客户端的真实IP地址,同时可以进行一些安全控制,如访问控制、内容过滤等。

反向代理:
定义:反向代理位于服务器端,客户端的请求直接发送到反向代理服务器,然后由反向代理服务器根据配置将请求转发到后端的一个或多个服务器上,最后将后端服务器的响应返回给客户端。
作用:反向代理可以负载均衡、提高安全性、缓存静态内容等。

Nginx反向代理的配置语法

Nginx 的反向代理功能是通过 ngx_http_proxy_module 模块实现的。这个模块在安装 Nginx 的时候默认就已经包含在内了。以下是一些在配置 Nginx 反向代理时常用的指令及其说明。

proxy_pass
语法proxy_pass URL
默认值无默认值
位置location块
说明将请求转发到指定的URL

该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式。
URL:为要设置的被代理服务器地址,包含传输协议(http,https://)、主机名称或IP地址加端口号、URI等要素。
例子:访问192.168.101.23后将服务跳转到192.168.101.18

192.168.101.23nginx配置

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location / {
                proxy_pass http://192.168.101.18;
        }
    }

在 192.168.101.18的index.html添加标识
在这里插入图片描述
浏览器访问测试
在这里插入图片描述

斜杠的问题

如果不加斜杠访问会提示错误
演示:

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location server {
                proxy_pass http://192.168.101.18;
        }
    }

路径不能正常访问
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1030439e6d8e4abeb5618ca0bd0cba17.png

查看错误提示对应路径中没有这个文件,因为server被加到路径中去了,但是服务器并没有这个路径
在这里插入图片描述

加上斜杠则能正常访问

proxy_server
    server {
        listen 8082;
        server_name localhost;
        location /server {
                proxy_pass http://192.168.101.18/;
        }
    }

在这里插入图片描述
区别在于 如果不加斜杠则会把server拼接到访问路径中去,如果加上则不会.
如果location只有一个"/"则加不加都一样

proxy_set_header

语法proxy_set_header field value
默认值proxy_set_header Host $proxy_host; proxy_set_header Connection close;
位置http, server, location

该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器

需要注意的是,如果想要看到结果,必须在被代理的服务器上来获取添加的头信息。
被代理服务器: [192.168.101.18]

server {
        listen 83;
        server_name 127.0.0.1;
        access_log logs/access.log  main;
        default_type text/plain;
        location / {
                return 200 $http_username; #获取头信息
        }

    }

代理服务器: [192.168.101.23]

server {
        listen  8082;
        server_name localhost;
        location /server {
                proxy_pass http://182.168.101.18:83/;
                proxy_set_header username JACK; #设置头信息
        }
    }

输出
在这里插入图片描述

代理服务器 192.168.101.23
设置多个值

server {
        listen 8082;
        server_name localhost;
        location / {
                proxy_pass http://192.168.101.18/;
        }

        location /server {
                proxy_pass http://192.168.101.18:83/;
                proxy_set_header username JACK;
                proxy_set_header host $host;

        }
    }

被代理服务器 [192.168.101.18]

 server {
        listen 83;
        server_name 127.0.0.1;
        access_log logs/access.log  main;
        default_type text/plain;
        location / {
                return 200 $http_username=$http_host';
        }

    }

在这里插入图片描述

proxy_redirect

proxy_redirect 是 Nginx 服务器中用于处理代理请求重定向的指令。
在反向代理配置中,proxy_redirect 指令用于修改目标服务器返回的重定向响应中的Location头部信息。这样可以确保客户端在接收到重定向响应时,能够访问正确的URL。

语法proxy_redirect error_code http_status
默认值proxy_redirect default;
位置http, server, location
用途重定向响应的URL和状态码

服务端[192.168.101.18]

server {
        listen 85;
        server_name 127.0.0.1;
        location / {
                root html;
                index index.html;
        }

    }

代理服务端[192.168.101.23] 代理192.168.101.18

server {
        listen 8083;
        server_name 127.0.0.1;
        location / {
                proxy_pass http://192.168.101.18:85/; 
                proxy_redirect http://192.168.101.18/  http://192.168.101.23:8080/;
        }
    }

配置语法:proxy_redirect [redirect replacement];

  • redirect:目标,Location的值
  • replacement:要替换的值

proxy_redirect default;

  • default;
  • 将location块的uri变量作为replacement,
  • 将proxy_pass变量作为redirect进行替换

请求处理流程
假设有一个客户端请求的流程:

客户端请求:

客户端向 http://example.com:8083/ 发起请求。
Nginx 接收到请求:

Nginx 在端口 8083 上监听到了这个请求,并根据 server_name 和 location / 的配置进行处理。
请求代理:

根据 proxy_pass 指令,Nginx 将这个请求转发(代理)到 http://192.168.101.18:85/

后端服务器响应:
假设后端服务器 192.168.101.18:85 返回一个重定向响应,响应头包含 Location: http://192.168.101.18/some/path。

Nginx 修改重定向响应:
根据 proxy_redirect 指令,Nginx 将 Location 头从 http://192.168.101.18/some/path 修改为 http://192.168.101.23:8080/some/path。

客户端接收到响应:
客户端收到 Nginx 修改后的重定向响应,并访问 http://192.168.101.23:8080/some/path,而不是直接访问 http://192.168.101.18/some/path。

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

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

相关文章

逻辑回归推导

逻辑回归既可以看作是回归算法,也可以看做是分类算法。通常作为分类算法使用,只可以解决二分类问题。 在上述平面中,每个颜色代表一个类别,即有4个类别 将红色的做为一个类别,其他三个类别都统称为其他类别&#xff0…

javascript 的上下文与作用域

目录 1. 初步了解 上下文(context)2. 全局上下文(global context)3. 上下文栈 (context stack)4. 作用域链( scope chain)5. 作用域(scope)6. 作用域链增强7. 变量声明7.1 var 声明变量7.2 let 声明变量7.3 const 常量声明 8. 标识符查找总结 带着疑问去…

D3.高精度

1.分类情况 AB、A-B、A*a、A/b A和B指的是超大超长整数&#xff0c;长度<1e6; a的值<10000&#xff1b; 2.大整数的存储 int 变量肯定是存不了这么大的数的&#xff0c;做法是将大整数先存到string字符串&#xff0c;再使用字符串的访问方式&#xff0c;将每一位数存到…

C++树形结构(3 树的中心、重心)

目录 一.树的中心&#xff1a; 1.树的概念&#xff1a; 2.树的性质&#xff1a; 性质1&#xff1a; 性质2&#xff1a; 3.树的中心求解&#xff1a; 4.例题&#xff1a; 二.树的重心&#xff1a; 1.基础概念&#xff1a; 2.求解方法&#xff1a; 3.例题&#xff1a;…

运筹学笔记

计算的时间问题&#xff01;计算机解决了计算量的问题&#xff01; 计算机的发展对运筹学研究起到了极大的促进作用。 运筹学的一个特征之一是它常常会考虑寻求问题模型的最佳解决方案&#xff08;称为最优解&#xff09;。 没有人能成为运筹学所有方面的专家。 分析学越来越流…

反弹shell的方式——之NC反弹shell

反弹shell是指在攻击机监听某个端口&#xff0c;然后通过目标连接攻击机监听的端口&#xff0c;在攻击机反弹得到目标机的shell。通常在目标网络有防火墙或者其他因素限制&#xff0c;导致无法持续控制目标&#xff0c;或者执行命令受阻等情况时需要进行反弹shell 常见的反弹s…

Null和 Undefined 两者区别?

1、 Undefined 和 null 的 区 别 首 先 Undefined 和 Null 都 是 基 本 数 据 类 型 &#xff0c; 这 两 个 基 本 数 据 类 型 分 别 都 只 有 一 个 值 &#xff0c; 就 是 undefined 和 null。 2、undefined 代 表 的 含 义 是 未 定 义 &#xff0c; null 代 表 的 含 义 …

Python Flask入门到精通:详细教程和实战案例

前言 Flask是一个轻量级的Web框架&#xff0c;用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展&#xff0c;非常适合于从简单的单页应用到复杂的大型项目。通过Flask&#xff0c;可以创建各种Web应用程序&#xff0c;比如博客、电子商务网站、RESTful API等。 …

META 备受期待的 Llama 3 405B 即将发布

本心、输入输出、结果 文章目录 META 备受期待的 Llama 3 405B 即将发布前言Llama 3 405B或许会彻底改变专用模型的数据质量Llama 3 405B将形成新的模型生态系统:从基础模型到专家组合Llama 3 405B有最高效 API 的竞争Llama 3 405B 基准测试META 备受期待的 Llama 3 405B 即将…

韦东山嵌入式linux系列-具体单板的按键驱动程序(查询方式)

1 GPIO 操作回顾 &#xff08;1&#xff09;使能模块&#xff1b; &#xff08;2&#xff09;设置引脚的模式&#xff08;工作于GPIO模式&#xff09;&#xff1b; &#xff08;3&#xff09;设置GPIO本身&#xff08;输入/输出&#xff09;&#xff1b; &#xff08;4&…

Linux_make/Makefile的理解

1.make是一个命令&#xff0c;makefile是一个文件, 依赖关系和依赖方法. a.快速使用一下 i.创建一个Makefile文件(首字母也可以小写) b.依赖关系和依赖方法 i.依赖关系: 我为什么要帮你? mybin:mytest.c ii.依赖方法: 怎么帮? gcc -o mybin mytest.c make之前要注意先创建…

UE4-构建光照后导入的静态网格体变黑

当我们将我们的静态网格体导入到项目当中的时候&#xff0c;此时我们进行重新构建光照&#xff0c;我们在从新构建完光照后&#xff0c;会发现我们的静态网格体全部变黑了&#xff0c;此时是因为没有设置光照贴图分辨率和坐标索引引起的。 将General Settings中的L…

Unite 上海 强势回归

​​​ 他回归了 Unite 大会是一年一度的 Unity 全球开发者盛会。今年&#xff0c;Unite 将于 7 月盛夏点亮上海外滩。此次盛会&#xff0c;我们将以“团结”为核心&#xff0c;凝聚全球 3000 多位 Unity 社区精英的力量&#xff0c;共同开启 Unity 技术的新纪元。 在这里&am…

【C++】透析类和对象(上)

有不懂的&#xff0c;可翻阅我之前文章哦&#xff01; 个人主页&#xff1a;CSDN_小八哥向前冲 所属专栏&#xff1a;C入门 目录 类的定义 访问限定符 类域 类的实例化 实例化概念 对象大小 this指针 类的默认成员函数 构造函数 析构函数 模拟栈&#xff08;初学者&…

(最最最全)远程服务器连接新手教程-服务器基本指令、连接服务器、安装Anaconda、配置Conda、配置环境、bashrc环境变量修改(为空怎么办)

一、服务器基本指令 ls - 列出当前目录的文件和子目录cd - 改变当前目录pwd - 显示当前目录的路径df - 查看当前内存mkdir - 创建新目录rm - 删除文件cp - 复制文件mv - 移动或重命名文件 https://blog.csdn.net/weixin_43693391/article/details/133984143?ops_request_mis…

Ubuntu20.04版本升级openssh9.8p1方法

一、问题描述&#xff1a; 8.5p1 和 9.7p1 之间的openssh版本漏洞可能会导致linux系统以root身份进行RCE&#xff0c;所以需安装最新版本 二、解决方法&#xff1a; 将当前openssh版本升级到最新的版本即openssh-9.8p1版本&#xff0c;OpenSSL大版本升级且OpenSSH有新稳定版本…

今天我们聊聊C#的并发和并行

并发和并行是现代编程中的两个重要概念&#xff0c;它们可以帮助开发人员创建高效、响应迅速、高性能的应用程序。在C#中&#xff0c;这些概念尤为重要&#xff0c;因为该语言提供了对多线程和异步编程的强大支持。本文将介绍C#中并发和并行编程的关键概念、优点&#xff0c;并…

CSS(二)——CSS 背景

CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 背景属性 Property描述background简写属性&#xff0c;作用是将背景属性设置在一个声明中。background-attachment背景图像是否固定或者随着页面的其余部分滚动。background-color设置元素的背景颜色。background-image把…

秋招突击——7/24——知识补充——JVM类加载机制

文章目录 引言类加载机制知识点复习类的生命周期1、加载2、连接——验证3、连接——准备4、连接——解析5、初始化 类加载器和类加载机制类加载器类加载机制——双亲委派模型 面试题整理1、类加载是什么2、类加载的过程是什么3、有哪些类加载器&#xff1f;4、双亲委派模型是什…

FineBI连接MySQL5.7

一、在FineBI系统管理中&#xff0c;点击【新建数据库连接】 选择MySQL数据库 配置数据库连接&#xff0c;如下&#xff0c;其中数据库名称就是需要连接的目标数据库