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如何实现高性能和可扩展性,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Nginx多层代理配置方法

    Nginx多层代理配置方法

    这篇文章主要介绍了Nginx多层代理配置方法,此篇文章只给大家介绍nginx的多级代理配置代码,需要的朋友可以参考下
    2017-08-08
  • Nginx内网单机反向代理的实现

    Nginx内网单机反向代理的实现

    本文主要介绍了Nginx内网单机反向代理的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 文件上传到服务器文件名中文乱码问题

    文件上传到服务器文件名中文乱码问题

    上传附件到部署服务器,但是上传到服务器出现文件名中文乱码,中文变成(?)问号,而且在本地测试是正常的,通过打印日志发现,下面fileName乱码,本文给大家讲解文件上传到服务器文件名中文乱码问题解决方案,感兴趣的朋友一起看看吧
    2024-02-02
  • nginx实现tomcat动静分离详解

    nginx实现tomcat动静分离详解

    本篇文章主要介绍了nginx实现tomcat动静分离详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • nginx搭建图片服务器的过程详解(root和alias的区别)

    nginx搭建图片服务器的过程详解(root和alias的区别)

    这篇文章主要介绍了nginx搭建图片服务器(root和alias的区别)的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Linux查看nginx安装目录和配置文件路径的实现

    Linux查看nginx安装目录和配置文件路径的实现

    本文主要介绍了Linux查看nginx安装目录和配置文件路径的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • Nginx timeout超时配置详解

    Nginx timeout超时配置详解

    这篇文章主要介绍了Nginx timeout超时配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Nginx反向代理学习实例教程

    Nginx反向代理学习实例教程

    nginx作为web服务器一个重要的功能就是反向代理,当然你也可以使用nginx配置正向代理,这篇文章主要给大家介绍了关于Nginx反向代理的相关资料,需要的朋友可以参考下
    2021-10-10
  • nginx配置客户端保存cookie的实现

    nginx配置客户端保存cookie的实现

    本文主要介绍了nginx配置客户端保存cookie的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论