nginx:将HTTP用户代理请求发送到特定的后端服务器
时间:2020-01-09 10:42:47 来源:igfitidea点击:
在后端服务器IP 192.168.1.5和192.168.1.6上的大量图片,css和javascript。
如何确保nginx反向代理负载平衡器始终将来自Mozilla的所有http_user_agent请求仅发送到服务器192.168.1.5,而将MSIE发送到服务器192.168.1.6?
如果有条件的话,Nginx Web服务器不支持它可以根据变量重定向和/或者选择配置。
在这种情况下,您需要使用名为$http_user_agent的变量,该变量可用于检索有关用户浏览器,版本和操作系统的信息。
语法如下:
if ( condition ){ do_something } if ( $http_user_agent = "wget" ){ do_something } if ( $http_user_agent ~ MSIE ){ return 403; }
if指令用于检查条件的真实性。
如果条件为真,则执行花括号中指示的代码,并根据以下块中的配置处理请求。
指令if内部配置是从上一级继承的。
您可以在条件中使用变量名或者任何以0开头的字符串。
也,
- 使用=和!=运算符将变量与行进行比较;
- 使用符号~*和~与正则表达式进行模式匹配:
- ~是区分大小写的匹配
- ~*指定不区分大小写的匹配项(firefox匹配FireFox)
- !~和!~*表示相反,不匹配
- 使用-f和!-f运算符检查文件是否存在;
- 使用-d和!-d运算符检查目录的存在;
- 使用-e和!-e运算符检查文件,目录或者符号链接的存在;
- 使用-x和!-x运算符检查文件是否可执行。
- 正则表达式的某些部分可以放在括号中,然后可以在$1到$9变量中访问其值。
例子
编辑/usr/local/nginx/conf/nginx.conf,执行:
# vi /usr/local/nginx/conf/nginx.conf
设置上游服务器:
upstream myproxybackend { server 192.168.1.1; server 192.168.1.2; server 192.168.1.3; server 192.168.1.4; } upstream msiebackend { server 192.168.1.6; } upstream mozillabackend { server 192.168.1.5; }
更新配置如下:
server { access_log logs/access.log; error_log logs/error.log; index index.html; listen 192.54.1.5:80 default; root /usr/local/nginx/html; server_name example.com www.example.com 0.example.com; ## PROXY - Web location / { proxy_pass http://myproxybackend; if ($http_user_agent ~ MSIE ) { proxy_pass http://msiebackend; } if ($http_user_agent ~ Mozilla ) { proxy_pass http://mozillabackend; } proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; ... .. }
最后重启/重新加载新的更改:
# /usr/local/nginx/sbin/nginx -s reload