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

