前面介绍的分发方式适用于单个集群,而基于请求头分发适用于多个集群场景。
基于请求头的分发
1、基于host分发:适用于一个公司有多个网站,一个网站设置为一个集群
#nginx分发器设置
http {
upstream web1 { # 名为web1的反向代理群组
server server1;
}
upstream web2 { # 名为web2的反向代理群组
server server2;
}
server { # web1虚拟主机
listen 80;
server_name www.web1.com; # 基于域名分发必须有域名
location / {
proxy_pass http://web1;
}
}
server { # web2虚拟主机
listen 80;
server_name www.web2.com; # 基于域名分发必须有域名
location / {
proxy_pass http://web2;
}
}
}
2、基于开发语言分发:适用于混合开发的网站,某些大型网站既有php也有jsp
# 分发器上nginx配置
http {
upstream php {
server server1;
}
upstream html {
server server2;
}
server {
location ~* \.php$ { # 以php结尾的
proxy_pass http://php;
}
location ~* \.html$ { # 以html结尾的
proxy_pass http://html;
}
}
}
3、基于浏览器分发:常应用于PC端和移动端区分或浏览器适配
upstream curl { server server1; }
upstream firefox { server server2; }
upstream other { server server3; }
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://other;
if ( $http_user_agent ~* curl ) {
proxy_pass http://curl;
}
if ( $http_user_agent ~* firefox ) {
proxy_pass http://firefox;
}
}
}
4、基于源IP分发:通过ngx_http_geo_module模块,根据客户端ip访问到不同的server
upstream bj.server {
server server1; # web01
}
upstream sh.server {
server server2; # web02
}
upstream default.server {
server server3; # web03
}
geo $geo { # IP库
default default;
server1 bj; # 北京
server2 sh; # 上海
}
server {
listen 80;
server_name www.web1.com;
location / {
proxy_pass http://$geo.server$request_uri;
}
}
标签:分发,http,请求,pass,server,Nginx,proxy,upstream
From: https://www.cnblogs.com/tjane/p/16875574.html