利用nginx实现指定路由
Nginx作为负载均衡,如果后面有2台服务器,那么会均衡的打到后面的两台服务器上,如果要实现具体的用户打到指定的服务器上,就需要用到nginx配置的路由。
配置文件如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 65;
upstream zabbix {
server 172.16.126.241:80;
}
server {
listen 80;
server_name localhost;
location / {
# if ($args ~ hostid=1 ){
# rewrite ^/ http://www.baidu.com;
# }
# if ($args ~ hostid=2 ){
# rewrite ^ http://www.163.com;
# }
if ( '$http_hostid' = '2'){
proxy_pass http://172.16.121.100:8000;
# rewrite ^/ http://www.baidu.com;
}
if ( '$http_hostid' = '1') {
proxy_pass http://172.16.121.100:8001;
# rewrite ^/ http://www.163.com;
}
proxy_pass http://zabbix;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
两种方式,第一种是通过实际情况的http参数来路由,就是如下的代码,nginx有$args全局变量,是否包含字符串hostid=1来路由。
if ($args ~ hostid=1 ){
rewrite ^/ http://www.baidu.com;
}
if ($args ~ hostid=2 ){
rewrite ^ http://www.163.com;
}
第二种方式,是通过header来路由,做http请求的时候,将头部里面加入一个参数hostid。Nginx的配置文件里面,通过$http_hostid来获取头部的参数进行路由。
if ( '$http_hostid' = '2'){
proxy_pass http://172.16.121.100:8000;
}
if ( '$http_hostid' = '1') {
proxy_pass http://172.16.121.100:8001;
}
在linux下用curl命令加头部做验证,命令如下
curl -H "hostid:1" http://172.16.121.100/recommend?suid=1000448033&i_page=1&i_perpage=6