Nginx根据参数跳转到不同服务器
1.通过HTTP URL参数跳转
upstream servera {
#weigth参数表示权值,权值越高被分配到的几率越大
least_conn;
server 10.0.0.134:8620 weight=1; #服务器A
}
upstream serverb {
#weigth参数表示权值,权值越高被分配到的几率越大
least_conn;
server 10.0.0.135:8620 weight=1; #服务器B
}
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.army16.com访问
server_name www.army16.com;
access_log /var/log/nginx/access.log main;
set $backend_server "servera";
#根据URL参数判断
if ( $arg_project ~ '^blog$' ) {
set $backend_server "serverb";
}
#默认请求
location / {
#定义服务器的默认网站根目录位置
root html;
#定义首页索引文件的名称
index test.html index.html index.htm index.shtml index.jsp;
proxy_pass http://$backend_server;
}
}
http://www.army16.com?project=hao http://www.army16.com?project=blog
2.通过HTTP Header跳转
第一种: 简单情况, 可以通过判断处理:
upstream servera {
#weigth参数表示权值,权值越高被分配到的几率越大
least_conn;
server 10.0.0.134:8620 weight=1; #服务器A
}
upstream serverb {
#weigth参数表示权值,权值越高被分配到的几率越大
least_conn;
server 10.0.0.135:8620 weight=1; #服务器B
}
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.army16.com访问
server_name www.army16.com;
access_log /var/log/nginx/access.log main;
#set $backend_server "servera";
#根据自定义Header(header-project)判断
if ( $http_header_project ~ '^blog$' ) {
set $backend_server "serverb";
}
#默认请求
location / {
#定义服务器的默认网站根目录位置
root html;
#定义首页索引文件的名称
index test.html index.html index.htm index.shtml index.jsp;
proxy_pass http://$backend_server;
}
}
C:\Users\ArmyQin>curl --header "header-project:hao" http://www.army16.com C:\Users\ArmyQin>curl --header "header-project:blog" http://www.army16.com
第二种: 复杂性, 比如一个project对应一台服务器, 多个project对应一台服务器.
#Nginx对于URL里的请求参数, 以$http_开头, 如: 请求Header是header-project, 到了Nginx接收就是$http_header_project, 把中间线变成下划线, 变成小写字母
#$serve_name是通过$http_header_project在map的key找到返回的value值, 如果$http_header_project = blog, 那$serve_name就等于10.0.0.134:8620
map $http_header_project $serve_name {
default 10.0.0.135:8620;
blog 10.0.0.134:8620;
hao 10.0.0.135:8620;
app 10.0.0.134:8620;
}
include servers/server.conf;
#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.army16.com访问
server_name www.army16.com;
access_log /var/log/nginx/access.log main;
#默认请求
location / {
#定义服务器的默认网站根目录位置
root html;
#定义首页索引文件的名称
index test.html index.html index.htm index.shtml index.jsp;
proxy_pass http://$serve_name; #$serve_name是在上面server.conf文件定义的变量.
}
}
C:\Users\ArmyQin>curl --header "header-project:blog" http://www.army16.com C:\Users\ArmyQin>curl --header "header-project:hao" http://www.army16.com