Nginx反向代理及反向代理负载均衡

1.反向代理实验环境

#172.25.254.10 RS1 172.25.254.20 RS2

root@RSX \~# dnf install httpd -y

root@RSX \~# systemctl enable --now httpd

root@RSX \~# echo 172.25.254.20 > /var/www/html/index.html

在主机中测试

root@Nginx \~# curl 172.25.254.10

172.25.254.10

root@Nginx \~# curl 172.25.254.20

172.25.254.20

2.简单的代理方法

root@RS2 \~# mkdir /var/www/html/web

root@RS2 \~# echo 172.25.254.20 web > /var/www/html/web/index.html
root@Nginx \~# vim /usr/local/nginx/conf/conf.d/vhosts.conf

server {

listen 80;

server_name lee.timinglee.org;

location / {

proxy_pass http://172.25.254.10:80;

}

location /web {

proxy_pass http://172.25.254.20:80;

}

}
root@Nginx \~# nginx -s reload

测试

root@Nginx \~# curl 172.25.254.20/web/

172.25.254.20 web

root@Nginx \~# curl 172.25.254.10

172.25.254.10

3.proxy_hide_header filed

Administrator.DESKTOP-VJ307M3 ➤ curl -v lee.timinglee.org

* Trying 172.25.254.100:80...

* TCP_NODELAY set

* Connected to lee.timinglee.org (172.25.254.100) port 80 (#0)

> GET / HTTP/1.1

> Host: lee.timinglee.org

> User-Agent: curl/7.65.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Server: nginx/1.28.1

< Date: Tue, 03 Feb 2026 06:31:03 GMT

< Content-Type: text/html; charset=UTF-8

< Content-Length: 14

< Connection: keep-alive

< Keep-Alive: timeout=100

< Last-Modified: Tue, 03 Feb 2026 06:20:50 GMT

< ETag: "e-649e570e8a49f" #可以看到ETAG信息

< Accept-Ranges: bytes

<

172.25.254.10

* Connection #0 to host lee.timinglee.org left intact

root@Nginx \~# vim /usr/local/nginx/conf/conf.d/vhosts.conf

server {

listen 80;

server_name lee.timinglee.org;

location / {

proxy_pass http://172.25.254.10:80;

proxy_hide_header ETag;

}

location /web {

proxy_pass http://172.25.254.20:80;

}

}

root@Nginx \~# nginx -s reload

测试

Administrator.DESKTOP-VJ307M3 ➤ curl -v lee.timinglee.org

* Trying 172.25.254.100:80...

* TCP_NODELAY set

* Connected to lee.timinglee.org (172.25.254.100) port 80 (#0)

> GET / HTTP/1.1

> Host: lee.timinglee.org

> User-Agent: curl/7.65.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Server: nginx/1.28.1

< Date: Tue, 03 Feb 2026 06:33:11 GMT

< Content-Type: text/html; charset=UTF-8

< Content-Length: 14

< Connection: keep-alive

< Keep-Alive: timeout=100

< Last-Modified: Tue, 03 Feb 2026 06:20:50 GMT

< Accept-Ranges: bytes

<

172.25.254.10

4.proxy_pass_header

Administrator.DESKTOP-VJ307M3 ➤ curl -v lee.timinglee.org

* Trying 172.25.254.100:80...

* TCP_NODELAY set

* Connected to lee.timinglee.org (172.25.254.100) port 80 (#0)

> GET / HTTP/1.1

> Host: lee.timinglee.org

> User-Agent: curl/7.65.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Server: nginx/1.28.1 #默认访问不透传server信息

< Date: Tue, 03 Feb 2026 06:35:35 GMT

< Content-Type: text/html; charset=UTF-8

< Content-Length: 14

< Connection: keep-alive

< Keep-Alive: timeout=100

< Last-Modified: Tue, 03 Feb 2026 06:20:50 GMT

< Accept-Ranges: bytes

<

172.25.254.10

* Connection #0 to host lee.timinglee.org left intact

root@Nginx \~# vim /usr/local/nginx/conf/conf.d/vhosts.conf

server {

listen 80;

server_name lee.timinglee.org;

location / {

proxy_pass http://172.25.254.10:80;

proxy_pass_header Server;

}

location /web {

proxy_pass http://172.25.254.20:80;

}

}

root@Nginx \~# nginx -s reload

Administrator.DESKTOP-VJ307M3] ➤ curl -v lee.timinglee.org

* Trying 172.25.254.100:80...

* TCP_NODELAY set

* Connected to lee.timinglee.org (172.25.254.100) port 80 (#0)

> GET / HTTP/1.1

> Host: lee.timinglee.org

> User-Agent: curl/7.65.0

> Accept: */*

>

* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK

< Date: Tue, 03 Feb 2026 06:37:25 GMT

< Content-Type: text/html; charset=UTF-8

< Content-Length: 14

< Connection: keep-alive

< Keep-Alive: timeout=100

< Server: Apache/2.4.62 (Red Hat Enterprise Linux) #透传结果

< Last-Modified: Tue, 03 Feb 2026 06:20:50 GMT

< Accept-Ranges: bytes

<

172.25.254.10

* Connection #0 to host lee.timinglee.org left intact

5.透传信息

root@RS1 \~# vim /etc/httpd/conf/httpd.conf

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined

root@RS1 \~# systemctl restart httpd
root@Nginx \~# vim /usr/local/nginx/conf/conf.d/vhosts.conf

server {

listen 80;

server_name lee.timinglee.org;

location / {

proxy_pass http://172.25.254.10:80;

proxy_set_header X-Forwarded-For $remote_addr;

}

location /web {

proxy_pass http://172.25.254.20:80;

}
root@Nginx \~# nginx -s reload

Administrator.DESKTOP-VJ307M3 ➤ curl lee.timinglee.org

172.25.254.10

root@RS1 \~# cat /etc/httpd/logs/access_log

172.25.254.100 - - 03/Feb/2026:14:47:37 +0800 "GET / HTTP/1.0" 200 14 "-" "curl/7.65.0" "172.25.254.1"

6.反向代理负载均衡

root@Nginx \~# mkdir /usr/local/nginx/conf/upstream/

root@Nginx \~# vim /usr/local/nginx/conf/nginx.conf

root@Nginx \~# vim /usr/local/nginx/conf/upstream/loadbalance.conf

root@Nginx \~# mkdir /webdir/timinglee.org/error/html -p

root@Nginx \~# echo error > /webdir/timinglee.org/error/html/index.html

root@Nginx \~# vim /usr/local/nginx/conf/conf.d/vhosts.conf

server {

listen 8888;

root /webdir/timinglee.org/error/html;

}

测试

root@RS1+2 \~# systemctl stop httpd

相关推荐
寅时码3 小时前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
不好听6134 小时前
HTML 事件监听机制:从 DOM Level 0 到 React 合成事件
前端·react.js·html
wordbaby4 小时前
为什么刷新页面就 404?聊聊 SPA 路由与 Nginx 的那点事
前端
不好听6134 小时前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹4 小时前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听6134 小时前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
GuWenyue4 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue4 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
小林ixn5 小时前
从 onclick 到 React 合成事件,再到完整应用逻辑:一次前端架构的深度剖析
前端·react.js·前端框架
Csvn6 小时前
🧩「找不到模块」排查全记录——Monorepo 下 TypeScript 路径别名的 5 种「不通」与根治方案
前端