Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战

  • ​​前言​​
  • ​​一、需求背景​​

前言

本环境是基于 Centos 7.8 系统构建Nginx学习环境
具体构建,请参考 ​​Nginx-1.18.0 环境部署​​


一、需求背景

需求背景

通过Nginx实现动静分离,即通过Nginx反向代理配置规则实现让动态资源和静态资源及其他业务分别由不同的服务器解析,以解决网站性能,安全,用户体验等重要问题。

应用场景

  • 根据HTTP的URL进行转发的应用情况,被称为第7层(应用层)的负载均衡,而LVS的负载均衡一般用于TCP等的转发,因此被称为第4层(传输层)的负载均衡。
  • 在企业中,有时希望只用一个域名对外提供服务,不希望使用多个域名对应同一个产品业务,此时就需要在代理服务器上通过配置规则,使得匹配不同规则的请求会交给不同的服务器池处理。
  • 业务的域名没有拆分或者不希望拆分,但希望实现动静分离,多业务分离,这在前面已经讲解过案例了。
  • 不同的客户端设备(例如:手机和PC端)使用同一个域名访问同一个业务网站,就需要根据规则将不同设备的用户请求交给后端不同的服务器处理,以便得到最佳用户体验

设计架构

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_nginx

环境准备

role

host

ip

nginx-version

OS

nginx proxy host

node01

192.168.5.11

Nginx-1.18.0

Centos 7.8

nginx web server1

node02

192.168.5.12

Nginx-1.18.0

Centos 7.8

nginx web server2

node03

192.168.5.13

Nginx-1.18.0

Centos 7.8

nginx web server3

node04

192.168.5.13

Nginx-1.18.0

Centos 7.8

nginx client1

node05

192.168.5.15

----

Centos 7.8

nginx client2

windows 7 Ultimate.

192.168.5.7

----

windows 7 Ultimate.

配置后端 web服务

---node02 
[root@node02 ~]# mkdir /usr/share/nginx/html/static/
[root@node02 ~]# echo static_pools > /usr/share/nginx/html/static/index.html
[root@node02 ~]# vim /etc/nginx/conf.d/vhost.conf
server {
listen 80;
server_name static.wan.com;
location / {
root /usr/share/nginx/html/static;
index index.html index.htm;
}
}
[root@node02 ~]# systemctl restart nginx

---node03
[root@node03 ~]# mkdir /usr/share/nginx/html/upload/
[root@node03 ~]# echo upload_pools > /usr/share/nginx/html/upload/index.html
[root@node03 ~]# vim /etc/nginx/conf.d/vhost.conf
server {
listen 80;
server_name upload.wan.com;
location / {
root /usr/share/nginx/html/upload;
index index.html index.htm;
}
}
[root@node03 ~]# systemctl restart nginx

---node04
[root@node04 ~]# mkdir /usr/share/nginx/html/default/
[root@node04 ~]# echo default_pools > /usr/share/nginx/html/default/index.html
[root@node04 ~]# vim /etc/nginx/conf.d/vhost.conf
server {
listen 80;
server_name default.wan.com;
location / {
root /usr/share/nginx/html/default;
index index.html index.htm;
}
}
[root@node04 ~]# systemctl restart nginx

配置proxy host

[root@node01 ~]# vim /etc/nginx/conf.d/vhost.conf 
upstream static_pools {
server 192.168.5.12 weight=1;
}

upstream upload_pools {
server 192.168.5.12 weight=1;
}

upstream default_pools {
server 192.168.5.12 weight=1;
}


server {
listen 80;
server_name web.wan.org;

location /static {
proxy_pass http://static_pools;
proxy_set_header X-Forwarded-For $remote_addr;
}

location /default {
proxy_pass http://default_pools;
proxy_set_header X-Forwarded-For $remote_addr;
}

location /upload {
proxy_pass http://upload_pools;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
[root@node01 ~]# systemctl restart nginx

node05测试

添加hosts解析

[root@node05 ~]# vim /etc/hosts
192.168.5.11 web.wan.org

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_nginx_02


windows 7 Ultimate. 测试添加hosts解析

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_html_03


浏览器访问:http://web.wan.org/static/

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_Web集群_04


浏览器访问:http://web.wan.org/upload/

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_运维_05

浏览器访问:http://web.wan.org/default/

Web集群案例实战 -- Nginx 反向代理根据URL中的目录地址实现代理转发 -- 案例实战_运维_06