Nginx Proxy 代理测试的实现

 更新时间:2025年02月19日 10:15:10   作者:ZZDICT  
本文主要介绍了Nginx Proxy 代理测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一. 实验准备

关闭防火墙和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;  # 设置单个缓冲区的大小为32KB
        proxy_buffers 4 128k;  # 设置用于存储响应数据的缓冲区的数量和大小
        proxy_busy_buffers_size 256k;  # 设置活跃缓冲区的最大大小为256KB
        proxy_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的代理也是往上叠加。 

到此这篇关于Nginx Proxy 代理测试的实现的文章就介绍到这了,更多相关Nginx Proxy 代理测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx不关机升级(平滑升级)的实战指南

    Nginx不关机升级(平滑升级)的实战指南

    随着 nginx 越来越流行,并且 nginx 的优势也越来越明显,nginx 的版本迭代也来时加速模式,伴随着 nginx 的广泛应用,版本升级必然越来越快,线上业务不能停,所以本文给大家介绍了Nginx不关机升级(平滑升级)的实战指南,需要的朋友可以参考下
    2025-09-09
  • Nginx日志文件在哪及如何从中提取时间信息

    Nginx日志文件在哪及如何从中提取时间信息

    Nginx提供了一个非常灵活的日志记录功能,它可以使每个块的配置拥有各自独立的日志进行记录,并且根据记录内容的不同又分为访问日志和错误日志,这篇文章主要介绍了Nginx日志文件在哪及如何从中提取时间信息的相关资料,需要的朋友可以参考下
    2025-10-10
  • keepalived+lvs 对nginx做负载均衡和高可用的操作方法

    keepalived+lvs 对nginx做负载均衡和高可用的操作方法

    这篇文章主要介绍了keepalived+lvs 对nginx做负载均衡和高可用的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • nginx上设置html不缓存的方法实现

    nginx上设置html不缓存的方法实现

    前端项目发布以后,经常会遇到访问不到最新的版本,这主要是由于我们项目的入口文件index.html被浏览器或者代理缓存了,本文主要介绍了nginx上设置html不缓存,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 基于nginx获取代理服务ip以及客户端真实ip详解

    基于nginx获取代理服务ip以及客户端真实ip详解

    最近在研究nginx中如何获取真实客户端IP的方法,下面这篇文章主要给大家介绍了基于nginx获取代理服务ip以及客户端真实ip的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Nginx中的最大连接数与连接池用法解读

    Nginx中的最大连接数与连接池用法解读

    Nginx的连接数和连接池配置对于提升服务器性能和稳定性至关重要,通过配置这些参数,可以优化Nginx处理并发请求的能力,减少资源的浪费,并提高响应速度
    2025-12-12
  • 详解使用Nginx和uWSGI配置Python的web项目的方法

    详解使用Nginx和uWSGI配置Python的web项目的方法

    这篇文章主要介绍了使用Nginx和uWSGI配置Python的web项目的方法,与其他CGI连接方式相比uwsgi的连接性能也较为出众,需要的朋友可以参考下
    2015-12-12
  • 详解nginx websocket配置

    详解nginx websocket配置

    这篇文章主要介绍了详解nginx websocket配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 宝塔nginx部署前端页面刷新报404错误解决办法

    宝塔nginx部署前端页面刷新报404错误解决办法

    使用nginx部署前端项目是一篇非常详细的教程,旨在帮助初学者使用Nginx来部署前端项目,这篇文章主要给大家介绍了关于宝塔nginx部署前端页面刷新报404错误的解决办法,需要的朋友可以参考下
    2024-03-03
  • nginx日常维护常用命令

    nginx日常维护常用命令

    这篇文章主要介绍了nginx日常维护如nginx启动、重启、关闭等常用命令,需要的朋友可以参考下
    2014-03-03

最新评论