Nginx_根据URL中的目录地址实现代理转发(动静态分离)

时间:2024-04-03 22:25:39

一、根据URL中的目录地址实现代理转发(动静态分离)

需求:

1、当用户请求www.etiantian.org/upload/xx地址时,实现由upload上传服务器池处理请求。

2、当用户请求www.etiantian.org/static/xx地址时,实现由静态服务器池处理请求。

3、除此之外,对于其他访问请求,全都默认的动态服务器池处理请求。

了解了需求后,就可以进行upstream模块服务器池的配置了。

static_pools为静态服务池,有一个服务器,地址为10.0.0.9端口为80.

upstream static_pools {
        server 10.0.0.9:80 weight=1;
}

upload_pools为上传服务器池,有个服务器,地址为:10.0.0.10,端口为80.

upstream upload_pools {
               server 10.0.0.10:80 weight=1;
               }

default_pools默认的服务器池,即动态服务器池,有一个服务器,地址为10.0.0.11端口为80.

default_pools{
               server 10.0.0.11:80 weight=1;
               }

通过location或if语句把不同的URL(路径)请求,分给不同的服务器池处理:

将符合static的请求交给静态服务器池upload_pools配置如下:

location /static/ {
        proxy_pass http://static_pools;
        include proxy.conf;
        }

将符合upload的请求交给静态服务器池static_pools配置如下:

location /upload/ {
        proxy_pass http://upload_pools;
        include proxy.conf;
        }

将不符合上述规则的请求,默认全部交给动态服务池default_pools,配置如下:

location /default/ {
        proxy_pass http://default_pools;
        include proxy.conf;
        }

以if语句实现:

if ($request_uri ~*  "^/static/(.*)$")

{

         proxy_pass http://static_pools/$1;

}

if ($request_uri ~*  "^//upload/(.*)$")

{

        proxy_pass http://upload_pools/$1;

}

location / {

        proxy_pass http://default_pools;

        include proxy.conf;

}

下图是以location方式实现的配置文件。

Nginx_根据URL中的目录地址实现代理转发(动静态分离)