Nginx Proxy 代理测试

目录

https://blog.csdn.net/Lzcsfg/article/details/139781909

一. 实验准备

二. 配置反向代理

三. 配置二层代理

解释流程


一. 实验准备

关闭防火墙和selinux,准备三台同一网段的虚拟机

localhostRoucky_linux9.4192.168.226.20
localhostRoucky_linux9.4192.168.226.21
localhostRoucky_linux9.4192.168.226.22

三台服务器都配置官方的nginx源并下载和启动

sudo tee /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
yum install -y nginx
systemctl enable --now nginx

此时三台服务器都可以正常开启

二. 配置反向代理

正向代理和反向代理对比示意图

两者的区别在于代理的对象不一样:

正向代理中代理的对象是客户端,proxy和client同属一个LAN,对server透明;

反向代理中代理的对象是服务端,proxy和server同属一个LAN,对client透明。

现让192.168.226.20做客户端 ,192.168.226.21做代理服务器

对192.168.226.20做如下配置: 

 编辑配置文件/etc/nginx/conf.d/default.conf

vim /etc/nginx/conf.d/default.conf#修改配置文件为如下:
server {listen       80;server_name  localhost;location / {proxy_pass http://192.168.226.21;  # 设置代理目标的地址proxy_redirect default;  # 开启默认的代理重定向proxy_set_header Host $http_host;  # 设置代理请求中的 Host 头部proxy_set_header X-Real-IP $remote_addr;  # 设置真实客户端 IP 地址的头部proxy_set_header REMOTE-HOST $remote_addr;  # 设置远程主机的头部,此处与 X-Real-IP 重复了proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 设置经过的代理 IP 地址的头部proxy_connect_timeout 30;  # 设置与后端服务器建立连接的超时时间为30秒proxy_send_timeout 60;  # 设置向后端服务器发送请求的超时时间为60秒proxy_read_timeout 60;  # 设置从后端服务器读取响应的超时时间为60秒proxy_buffering on;  # 开启代理缓冲proxy_buffer_size 32k;  # 设置单个缓冲区的大小为32KBproxy_buffers 4 128k;  # 设置用于存储响应数据的缓冲区的数量和大小proxy_busy_buffers_size 256k;  # 设置活跃缓冲区的最大大小为256KBproxy_max_temp_file_size 256k;  # 设置临时文件的最大大小为256KB}error_page   500 502 503 504  /50x.html;  # 定义处理5xx错误的页面location = /50x.html {root   /usr/share/nginx/html;  # 指定50x错误页面的根目录}
}

测试Nginx配置文件

nginx -t

重新加载Nginx配置

nginx -s reload

现在在代理服务器192.168.226.21上查看Nginx访问日志

tail -f /var/log/nginx/access.log

整体解释

日志条目显示了来自IP地址 192.168.226.20 的客户端在2024年6月18日19:11:57(+0800时区)发起的多个HTTP请求。这些请求都是对服务器根路径 / 使用HTTP/1.0方法发起的 GET 请求。服务器返回的HTTP状态码是 304,表示资源未修改,客户端可以使用缓存的版本,因此响应大小为 0 字节。客户端的用户代理字符串表明它使用的是Chrome浏览器。X-Forwarded-For 字段显示客户端的真实IP地址为 192.168.226.1

简单讲记录了来自192.168.226.20的客户端的IP的记录,但是真实请求的IP是192.168.226.1 

三. 配置二层代理

在之前的实验里,我用windows客户端访问192.168.226.20,对192.168.226.20作量一层代理,一层代理服务器为192.168.226.21,现在我要讲192.168.226.21的下一层代理设置为192.168.226.22,即实现二层代理。

对192.168.226.22编辑配置文件

vim /etc/nginx/conf.d/default.conf#修改配置文件为如下:
server {listen       80;server_name  localhost;location / {proxy_pass http://192.168.226.22;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 30;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

 测试Nginx配置文件

nginx -t

重新加载Nginx配置

nginx -s reload

现在在代理服务器192.168.226.22上查看Nginx访问日志 

tail -f /var/log/nginx/access.log

 

查看192.168.226.21的日志:

查看192.168.226.20的日志:

修改默认发布页面用来辨别

#对192.168.226.20修改
echo "webserver1" > /usr/share/nginx/html/index.html
systemctl restart nginx#对192.168.226.21修改
echo "webserver2" > /usr/share/nginx/html/index.html
systemctl restart nginx#对192.168.226.22修改
echo "webserver3" > /usr/share/nginx/html/index.html
systemctl restart nginx

浏览器刷新页面访问 

实际上访问192.168.226.20是192.168.226.22提供的服务。 

 

解释流程

  • Windows客户端 发送请求到 http://192.168.226.20/
  • Nginx 1 (在192.168.226.21) 接收到请求,根据配置将其转发到目标服务器 192.168.226.22。
  • Nginx 2 (在192.168.226.22) 接收从Nginx 1转发的请求,并根据其配置将请求转发到最终的应用服务器,即也是192.168.226.22。

同理,三层nginx的代理也是往上叠加。 

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

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

相关文章

高校新闻头条系统

摘 要 随着互联网技术的快速发展&#xff0c;网络几乎成为了人们搜集信息和交流沟通最方便、快捷的通道&#xff0c;科技创新一直在影响着人们的生活&#xff0c;人们的衣食住行也在不断变化&#xff0c;与此同时&#xff0c;也大大改变了人们获取信息的方式&#xff0c;人们获…

Unity的渲染管线

渲染管线 概念 Unity的渲染管线是在图形学渲染管线的基础上&#xff0c;加上了高度可配置可扩展的框架&#xff0c;允许开发者自定义渲染流程。 渲染管线&#xff08;渲染流水线&#xff09;概述&#xff1a;将数据分阶段的变为屏幕图像的过程。 数据指的是模型、光源和摄像…

『FPGA通信接口』LVDS接口(4)LVDS接收端设计

文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述 接收端的传输模型各个属性应该与LVDS发送端各属性一致&#xff0c;例如&#xff0c;如果用于接收CMOS图像传感器的图像数据&#xff0c;则接收端程序的串化因子、通道个…

最新版ChatGPT对话系统源码 Chat Nio系统源码

最新版ChatGPT对话系统源码 Chat Nio系统源码 支持 Vision 模型, 同时支持 直接上传图片 和 输入图片直链或 Base64 图片 功能 (如 GPT-4 Vision Preview, Gemini Pro Vision 等模型) 支持 DALL-E 模型绘图 支持 Midjourney / Niji 模型的 Imagine / Upscale / Variant / Re…

【for循环】最大跨度

【for循环】最大跨度 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 【参考代码】 #include <iostream> using namespace std; int main(){ int n;int max 0, min 100;cin>>n;for(int i1; i<n; i1){int a;cin>>a;if(a>max){max a;}i…

VTABLE 基本表和透视表的分页功能

基本表和VTable数据分析透视表支持分页&#xff0c;但透视组合图不支持分页。 配置项&#xff1a; pagination.totalCount&#xff1a;数据项的总数。数据透视表中的VTable字段将被自动补充&#xff0c;以帮助用户获取数据项的总数。pagination.perPageCount&#xff1a;显示每…

STM32通过SPI硬件读写W25Q64

文章目录 1. W25Q64 2. 硬件电路 3. 软件/硬件波形对比 4. STM32中的SPI外设 5. 代码实现 5.1 MyI2C.c 5.2 MyI2C.h 5.3 W25Q64.c 5.4 W25Q64.h 5.5 W25Q64_Ins.h 5.6 main.c 1. W25Q64 对于SPI通信和W25Q64的详细解析可以看下面这篇文章 STM32单片机SPI通信详解-C…

Java宝藏实验资源库(8)多态、抽象类和接口

一、实验目的 理解面向对象程序的基本概念。掌握类的继承和多态的实现机制。熟悉抽象类和接口的用法。 二、实验内容、过程及结果 **1.Using the classes defined in Listing 13.1, 13.2, 13.3, write a test program that creates an array of some Circle and Rectangle in…

轨道地铁智能录音无线通信解决方案

一、行业背景 随着社会经济和通信行业的迅速发展&#xff0c;电话已成为企业运作中必不可少的联络手段。但电话作为即时沟通手段&#xff0c;往往无法进行事后追溯和复盘&#xff0c;容易造成不必要的麻烦。尤其在交通轨交行业领域&#xff0c;对语音工作的发生过程更需要有个…

全栈人工智能工程师:现代博学者

任何在团队环境中工作过的人都知道&#xff0c;每个成功的团队都有一个得力助手——无论你的问题性质如何&#xff0c;他都能帮助你。在传统的软件开发团队中&#xff0c;这个人是一个专业的程序员&#xff0c;也是另一种技术的专家&#xff0c;可以是像Snowflake这样的数据库技…

基于STM8系列单片机驱动74HC595驱动两个3位一体的数码管

1&#xff09;单片机/ARM硬件设计小知识&#xff0c;分享给将要学习或者正在学习单片机/ARM开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 为了节省单片机MCU的IO口资源驱动6个数码管&…

CAC 2.0融合智谱AI大模型,邮件安全新升级

在数字化时代&#xff0c;电子邮件的安全问题日益成为关注的焦点。Coremail CACTER邮件安全人工智能实验室&#xff08;以下简称“CACTER AI实验室”&#xff09;凭借其在邮件安全领域的深入研究与创新实践&#xff0c;不断推动技术进步。 此前&#xff0c;CACTER AI实验室已获…

docker进阶篇

docker进阶篇 (重点) 1、docker run2、docker ps3、docker restart4、docker pull5、docker stop6、docker logs7、docker stats8、docker rm(重点) 9、docker exec10、查看本机镜像docker image11、发布镜像docker commit12、docker save(例如保存为tar给别人用)13、删除镜像1…

【2024最新精简版】网络_Linux操作系统面试篇

文章目录 简述 tcp 和 udp的区别&#xff1f;get 和 post 请求有哪些区别&#xff1f;常用HTTP请求方式有哪些 ?进程跟线程的区别&#xff1f;僵尸进程&#xff1f;IO的多路复用&#xff1f;虚拟内存什么是OSI模型说一说HTTP协议说一说HTTPS协议HTTPS协议和HTTP协议有什么区别…

C语言 | Leetcode C语言题解之第172题阶乘后的零

题目&#xff1a; 题解&#xff1a; int trailingZeroes(int n) {int ans 0;while (n) {n / 5;ans n;}return ans; }

【MAUI】resource xml/file_paths (aka com.xxx.xxx:xml/ file _paths) not found.

APP2260:resource xml/file_paths (aka com.zettlercn.wms:xml/ file _paths) not found. This error is likely caused by an issue with the AndroidManifest.xml file or an Android manifest generation attribute in a source code file MAUI从6.0升级到8.0,调试发现资源…

安卓逆向案例——X酷APP逆向分析

X酷APP逆向分析 这里介绍一下两种不同的挂载证书的方法。 chls.pro/ssl无法在浏览器中下载证书是什么原因解决方法&#xff1a; 法一 1. 挂载系统分区为读写 使用正确的挂载点来挂载系统分区为读写&#xff1a; su mount -o remount,rw /dev/uijISjR/.magisk/block/syste…

前端 CSS 经典:旋转边框效果

效果&#xff1a; 思路&#xff1a;使用伪元素&#xff0c;给伪元素设置背景色&#xff0c;然后定位&#xff0c;遮盖&#xff0c;旋转。就可以实现旋转边框效果。 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta chars…

docker in docker 在CI中应用解析

docker in docker 简介 docker里嵌套运行docker&#xff0c;本文讲解其在jenkins和gitlab-runner 种的调用流程 一、用于jenkins 容器化部署jenkins时调用docker命令集成CI功能 [rootops-demo~]# docker inspect jenkins --format"{{json .Mounts}}" [{"T…

电子竞赛1——基于DDS的AM信号发生器

课题要求 产生AM调幅波&#xff1b; 要求&#xff1a;载波10K&#xff0c;被调制波1K&#xff1b; 短按键1&#xff08;pin_143&#xff09;改变该调幅波的调制度&#xff1a;25%、50%、75%&#xff1b; 长按按键1&#xff08;pin_143&#xff09;改变被调制信号频率&#…