一、根据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方式实现的配置文件。