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;  # 设置单个缓冲区的大小为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的代理也是往上叠加。 

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值