nginx反向代理
实验环境角色 IP地址 nginx反向代理服务器 172.16.2.15 web服务器 172.16.2.16 web服务器 172.16.2.17
实验流程
1) 所有节点关闭防火墙和SELinux
[ root@nginx ~]
[ root@nginx ~]
setenforce: SELinux is disabled
2) 配置web01节点(IP:172.16.2.16)
[ root@web01~]
[ root@web01 ~]
[ root@web01~]
[ root@web01~]
< h1 > web01/h1 >
You have new mail in /var/spool/mail/root
3) 配置web02节点(IP:172.16.2.17)
[ root@web02 ~]
[ root@web02 ~]
[ root@web02 ~]
[ root@web02 ~]
< h1 > web02 < /h1 >
You have new mail in /var/spool/mail/root
4) 在nginx反向代理服务器(172.16.2.15)安装nginx服务
[ root@nginx ~]
[ root@nginx ~]
5) 修改nginx配置文件并检查语法
5.1 编辑配置文件
[ root@nginx ~]
5.2 配置文件内容(反向代理+负载均衡)
# 定义后端服务器集群(负载均衡池,命名为backend_servers)
upstream backend_servers {server 172.16.2.16; # 后端web01服务器IPserver 172.16.2.17; # 后端web02服务器IP
}# 定义虚拟主机配置
server {listen 80; # 监听80端口(HTTP默认端口)server_name 172.16.2.15; # 虚拟主机绑定的IP(nginx服务器自身IP)# 匹配所有根路径(/)下的请求location / {proxy_pass http://backend_servers; # 将请求反向代理到后端服务器集群proxy_set_header Host $host; # 传递原始请求的Host头信息(避免后端服务器获取不到真实Host)proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP到后端服务器}
}
5.3 检查配置文件语法
[ root@nginx ~]
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
6) 启动nginx服务并验证可用性
[ root@nginx ~]
[ root@nginx ~]
< h1 > web01 < /h1 >[ root@nginx ~]
< h1 > web02 < /h1 >[ root@nginx ~]
< h1 > web01 < /h1 >[ root@nginx ~]
< h1 > web01 < /h1 >
[ root@nginx ~]
< h1 > web01 < /h1 >[ root@nginx ~]
< h1 > web02 < /h1 >[ root@nginx ~]
< h1 > web01 < /h1 >[ root@nginx ~]
< h1 > web01 < /h1 >
7) 使用宿主机浏览器访问
通过宿主机浏览器输入 172.16.2.15
,刷新页面可看到交替显示 web01
和 web02
,验证反向代理与负载均衡效果:
配置文件解析
1. 后端服务器集群(负载均衡池)定义
upstream backend_servers {# 后端web01服务器的IP地址(真实处理请求的服务器)server 172.16.2.16;# 后端web02服务器的IP地址(负载均衡时与web01分摊请求)
}
作用 :将多个后端web服务器组成一个集群,nginx通过此配置识别后端节点,默认采用「轮询」策略分发请求(即依次将请求分配给每个后端服务器)。
2. 虚拟主机与反向代理配置
# 定义一个虚拟主机(nginx的核心配置单元,对应一个服务实例)
server {listen 80; # 监听服务器的80端口(HTTP协议默认端口,客户端访问时无需指定端口)server_name 172.16.2.15; # 绑定的服务器IP(即nginx反向代理服务器自身的IP,客户端通过此IP访问)# 匹配请求路径:所有以“/”开头的请求(即所有请求)location / {# 核心指令:将匹配到的请求反向代理到“backend_servers”集群proxy_pass http://backend_servers;# 重要参数1:传递客户端原始请求的Host头# 作用:后端web服务器(如Apache)需要通过Host头识别请求的域名/IP,避免因反向代理导致Host丢失proxy_set_header Host $host;# 重要参数2:传递客户端的真实IP地址# 作用:默认情况下,后端服务器会将nginx的IP识别为客户端IP,此参数可让后端获取真实客户端IP(便于日志记录、权限控制等)proxy_set_header X-Real-IP $remote_addr;}
}
```