系统相关
首页 > 系统相关> > nginx根据URL地址、user_agent设备类型、文件扩展名 实现动静分离代理转发

nginx根据URL地址、user_agent设备类型、文件扩展名 实现动静分离代理转发

作者:互联网

前言

环境:centos 7.9 nginx1-8.0

nginx动静分离

有时候为了实现不同的资源访问不同的服务器,比如客户端访问的是图片,则nginx反向代理请求到后端的静态资源服务器,访问的是动态资源,则nginx反向代理请求到后端的动态资源服务器,这种根据客户请求的不同nginx代理到不同的节点服务器,我们称之为nginx实现资源的动静分离。

nginx根据url地址实现转发请求

为了实现资源的动静分离,我们可以部署动态资源服务器、静态资源服务器、上传资源服务器、默认服务器等,这样,当前端用户访问服务器时,我们可以根据用户传递过来的URL地址来匹配不同的nginx反向代理,从而让不同的资源解析到对应的节点服务器上。
如访问域名www.fujiseiko.com,然后用户访问www.fujiseiko.com/upload/xxx时,nginx反向代理请求的是上传资源服务器,用户访问www.fujiseiko.com/move/xxx时,nginx反向代理请求的是动态资源服务器,用户访问www.fujiseiko.com/static/xxx时,nginx反向代理请求的是静态资源服务器,用户访问www.fujiseiko.com时,nginx反向代理请求的是默认服务器,如下实现:

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

location  /move/ {
proxy_pass http://move_pools;
include proxy.conf;
}

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

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

nginx根据user_agent设备类型实现转发请求

除了上面的根据URL实现不同的代理转发,nginx还可以根据用户设备的类型来实现不同的请求转发,如在企业中,为了让不同的客户端用户拥有更好的体验,需要在后端服务器架设不同的服务器,如移动端客户端访问的是移动网站服务器,PC客户端访问的是PC端服务器,在常规的4层负载均衡中解决这个问题是通过人为的给客户分配不同的域名,如移动端访问wap.fujiseiko.com ,pc端用户访问pc.fujiseiko.com,这样最大的问题就是需要用户记住不同的域名,为了解决这个问题,在7层负载均衡中,就不需要人为的拆分域名,只提供一个www.fujiseiko.com给用户即可,其原理是通过获取用户设备类型$http_user_agent来将请求转发到对应的服务器上,如下:

location / {
	if($http_user_agent ~* "MSTE")
	{
		proxy_pass http://static_pools;
		include proxy.conf;
	}
		if($http_user_agent ~* "chrome")
	{
		proxy_pass http://upload_pools;
		include proxy.conf;
	}
	proxy_pass http://default_pools;
	include proxy.conf;
}

注意:当无法知道客户端的设备类型时,可以先模拟访问,然后在访问日志里$http_user_agent记录就能看到设备类型了。

nginx根据文件扩展名 实现

根据文件扩展名来实现不同的请求转发,其实与前面讲的URL很类似,如下:

location  ~ .*. (gif|jpg|jpeg|png|bmp|swf|css|js)$ {
	proxy_pass http://static_pools;
	include proxy.conf;
}

#或者使用if语句
if($http_url ~* ".*\.(php|php5|php7)$")
{
proxy_pass http://php_pools;
	include proxy.conf;
}
if($http_url ~* ".*\.(jsp|jsp*|do|do*)$")
{
	proxy_pass http://java_pools;
	include proxy.conf;
}

7层负载均衡、4层负载均衡

根据URL进行实现代理转发应用的情况,我们称之为第7层(应用层)负载均衡,而LVS一般用于TCP等的转发,我们称之为第4层(传输层)负载均衡。

标签:http,URL,agent,nginx,proxy,pools,服务器,include
来源: https://blog.csdn.net/MssGuo/article/details/118224424