一. 实验准备
关闭防火墙和selinux,准备三台同一网段的虚拟机
| localhost | roucky_linux9.4 | 192.168.226.20 |
| localhost | roucky_linux9.4 | 192.168.226.21 |
| localhost | roucky_linux9.4 | 192.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 代理测试内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论