分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

文章目录

      • 1. 正向代理和反向代理
      • 2. 配置代理服务
      • 3. proxy_pass 命令解析
      • 4. 设置代理请求headers

1. 正向代理和反向代理

正向代理是客户端通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器发送请求,获取资源并返回给客户端。正向代理的典型应用场景是翻墙,即通过代理服务器访问被封锁的网站。

反向代理则是服务器通过代理服务器向客户端提供服务的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向服务器发送请求,获取资源并返回给客户端。反向代理的典型应用场景是负载均衡,即将客户端的请求分发到多个服务器上,以提高系统的性能和可靠性。

总的来说,正向代理是客户端通过代理服务器访问互联网资源,而反向代理是服务器通过代理服务器向客户端提供服务。

2. 配置代理服务

以 RuoYi 后台管理系统作为反向代理的后台,通过nginx的8001端口把它代理到RuoYi系统的8088端口:

在这里插入图片描述

① 启动 RuoYi 后台管理系统:

[root@nginx-dev apps]# pwd
/home/apps
[root@nginx-dev apps]# ls
ruoyi-admin.jar ruoyi-admin.war
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

在这里插入图片描述

② 配置nginx服务器:在/etc/nginx/conf.d文件下新建一个配置文件 8001.conf

[root@nginx-dev conf.d]# cat 8001.conf
server {listen 8001;server_name ruoyi.localhost;location / {proxy_pass http://localhost:8088;}
}
[root@nginx-dev conf.d]# nginx -s reload

当访问代理服务器 nginx 的8001端口 http://192.168.1.9:8001 时,请求会转发到RuoYi后台服务 http://localhost:8088

在这里插入图片描述

3. proxy_pass 命令解析

proxy_pass 是 Nginx 配置中用于反向代理的指令,它的作用是将客户端的请求转发到指定的后端服务器上,并将后端服务器的响应返回给客户端。

① 如果proxy-pass的地址只配置到 IP+端口,那么location将被追加到转发地址中

server {listen 8001;server_name ruoyi.localhost;location /some/path/ {proxy_pass http://localhost:8088;}
}

访问 http://192.168.1.9:8001/some/path/page.html 将被代理到 http://localhost:8088/some/path/page.html。

② 如果proxy-pass的地址包括/或其他路径,那么/some/path将会被替换

server {listen 8001;server_name ruoyi.localhost;location /some/path/ {proxy_pass http://localhost:8088/;}
}

访问 http://192.168.1.9:8001/some/path/page.html 将被代理到 http://localhost:8088/page.html。Nginx 服务器会将请求中的 /some/path 部分替换为 /,然后将请求转发到 http://localhost:8088/。

server {listen 8001;server_name ruoyi.localhost;location /some/path/ {proxy_pass http://localhost:8088/a;}
}

访问 http://192.168.1.9:8001/some/path/page.html 将被代理到 http://localhost:8088/a/page.html。Nginx 服务器会将请求中的 /some/path 部分替换为 /a,然后将请求转发到 http://localhost:8088/a。

4. 设置代理请求headers

‎用户可以重新定义或追加header信息传递给后端‎‎服务器。可以包含文本、变量及其组合。默认情况下,仅重定义两个字段:‎

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

由于使用反向代理之后,后端服务无法获取用户的真实IP,所以,一般反向代理都会设置以下header信息。

location / {#nginx的主机地址proxy_set_header Host $http_host;#用户端真实的IP,即客户端IPproxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8088;
}

常用变量的值:

$host:nginx主机IP,例如192.168.56.105

$http_host:nginx主机IP和端口,192.168.56.105:8001

$proxy_host:localhost:8088,proxy_pass里配置的主机名和端口

$remote_addr:用户的真实IP,即客户端IP。

在这里插入图片描述

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

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

相关文章

抖音seo矩阵系统源代码开发搭建技术分享

抖音SEO矩阵系统是一个较为复杂的系统,其开发和搭建需要掌握一定的技术。以下是一些技术分享: 技术分享 抖音SEO矩阵系统的源代码可以使用JAVA、Python、PHP等多种语言进行开发。其中,JAVA语言的应用较为广泛,因为JAVA语言有良好…

软件架构师思维塑造

一、软件系统设计的六项原则 1、单一职责原则(Single Responsibility Principle) 2、开闭原则(Open Closed Principle) 3、里氏替换原则(Liskov Substitution Principle) 4、迪米特法则(Law of …

无涯教程-Lua - nested语句函数

Lua编程语言允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明这一概念。 nested loops - 语法 Lua中嵌套for循环语句的语法如下- for init,max/min value, increment dofor init,max/min value, incrementdostatement(s)endstatement(s) end Lua编程语言中的…

IMV3.0

经历了两个版本,基础内容在前面,可以使用之前的基础环境: v1: https://blog.csdn.net/wtt234/article/details/132139454 v2: https://blog.csdn.net/wtt234/article/details/132144907 一、代码组织结构 二、代码 2.…

下载网络文件到本地

文章目录 目录 前言 操作步骤 1.引入 2.读取出文件内容 3.筛选出URL 4.下载表情包 总结 前言 这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。 一、操作步骤 1.引入 首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在…

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

文章目录 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】前言探究隐藏网络端口netstat分析隐藏网络端口的原理关键数据结构隐藏网络端口源码 效果演示 Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】 前言 Rookit是个老生常谈的话…

大学python题库及答案解析,大学python程序设计题库

本篇文章给大家谈谈大学python题库及答案解析,以及python期末编程题及答案,希望对各位有所帮助,不要忘了收藏本站喔。 发表时间:2020-07-07 一、填空题(15分) 使用print()函数将多个字符串’How’、’are ’…

关于ETL的两种架构(ETL架构和ELT架构) qt

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库&#xf…

Qt+C++实现灯带动画运动位置变换移动跑马灯图片轮播

程序示例精选 QtC实现灯带动画运动位置变换移动跑马灯图片轮播 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC实现灯带动画运动位置变换移动跑马灯图片轮播>>编写代码&…

线段树模板12

线段树 洛谷上有两道线段树模板&#xff08;指模板1&#xff0c;模板2&#xff09;都是区间维护的&#xff0c;也就是说&#xff0c;都离不开lasytag的维护&#xff0c;为了提高效率&#xff0c;故使用了lasytag,这里看一下题 【模板】线段树 1 题目描述 如题&#xff0c;已…

uni-app:实现数字文本框,以及左右加减按钮

效果 代码 <template><view><view classline3><view classline3_position><view classleft>数量<text>*</text></view> <view class"right"><view class"quantity_btn"><view class"…

Mysql存储引擎InnoDB

一、存储引擎的简介 MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。 1、InnoDB存储引擎 从MySQL5.5版本之后&#xff0c;默认内置存储引擎是InnoDB&#xff0c;主要特点有&#xff1a; &#xff08;1&#xff09;灾难恢…

Docker入门——保姆级

Docker概述 ​ —— Notes from WAX through KuangShen 准确来说&#xff0c;这是一篇学习笔记&#xff01;&#xff01;&#xff01; Docker为什么出现 一款产品&#xff1a;开发—上线 两套环境&#xff01;应用环境如何铜鼓&#xff1f; 开发 – 运维。避免“在我的电脑…

【肺炎分类数据集】数据量非常充足的新冠肺炎分类数据共享

一、肺炎数据集介绍&#x1f349;&#xff1a; 1.1 格式&#x1f388; 按照标准的格式分为了①训练集train&#xff08;134138575198张&#xff09;&#xff0c;②验证集val&#xff08;8816张&#xff09;&#xff0c;③测试集test&#xff08;234390624张&#xff09;&#…

C++学习笔记总结练习:正则表达式

正则表达式 目录 regex正则表达式的定义regex_match/search/replace正则表达式的三个操作smatch、sregex_iterator正则表达式的结果对象以及与其配套的迭代器。 参考文献 正则表达式总结 1 正则表达式基础 不考虑子表达式的内容 头文件 #include<regex>库组件 库组件作…

React Dva项目 简单引入models中的所有JS文件

我们前面接触的 Dva项目 models目录下的文件还要一个一个引入 其实体验并不是很好 而且如果项目很大那就比较麻烦了 我们可以在 models 下创建一个 index.js 文件 编写代码如下 const context require.context("./", false, /\.js$/); export default context.key…

冠达管理:A股三大指数震荡整理 机构看好反弹趋势延续

周一&#xff0c;沪深两市呈弱势震动格式&#xff0c;创业板指领跌。到收盘&#xff0c;上证综指跌0.59%&#xff0c;报3268.83点&#xff1b;深证成指跌0.83%&#xff0c;报11145.03点&#xff1b;创业板指跌1%&#xff0c;报2240.77点。 资金面上&#xff0c;沪深两市昨日合计…

梳理日常开发涉及的负载均衡

负载均衡是当前分布式微服务时代最能提及的词之一&#xff0c;出于对分层、解耦、弱依赖、可配置、可靠性等概念的解读&#xff0c;一对一的模式变得不再可信赖&#xff0c;千变万化的网络环境中&#xff0c;冗余和备份显得格外重要&#xff0c;稍大型的系统就会存在大量微服务…

docker小白第一天

docker小白第一天 docker是什么docker理念容器与虚拟机比较docker能干什么docker官网介绍docker的基本组成docker平台架构 docker是什么 系统平滑移植&#xff0c;容器虚拟化技术。即源代码配置环境版本&#xff0c;打个包形成一个镜像文件&#xff0c;即软件带环境一起安装&a…