nginx帮助文档
http://nginx.org/en/docs/http/ngx_http_proxy_module.html1 upstream流量七层均衡代理模块
http://www.linuxidc.com/Linux/2015-03/115207.htm
http://blog.csdn.net/knuuy/article/details/46660203
1.1 upstream策略定义
是用于上行(客户访问服务器)的策略定义。策略包括到达哪些后端服务器,以什么样的方式在这些后端服务器实现均衡。
upstream策略有以下几种类型。
1.1.1 权重轮询策略
upstream webCam {//weight(权重)轮询机制
server 7.7.7.7:8080weight=2;
server 8.8.8.8:8080weight=2;
}
1.1.2 源IP HASH策略
upstreamfavresin{ //通过源IP进行HASH的机制。可以解决session问题,以及前后请求操作相关问题。
ip_hash;
server10.0.0.10:8080;
server 10.0.0.11:8080;
}
1.1.3 响应时延优先策略
upstreamfavresin{//fair机制,即响应延时短的优先调度
fair;
server10.0.0.10:8080;
server10.0.0.11:8080;
}
1.1.4 url HASH机制
upstreamresinserver{//url hash机制。固定URL到固定的后端,便于数据缓存。
server10.0.0.10:7777;
server 10.0.0.11:8888;
hash $request_uri;
hash_method crc32;
}
1.2 策略使用:Server Location指定
location ~^/agentMsg/{
proxy_pass http://xxx/ #必须要加
allow 7.7.7.7;
allow 8.8.8.8;
deny all;
}
1.2.1 Location规则的Key
访问的URL,如:~ ^/agentMsg/
其中有一些符号的具体含义是:
1. =
开头表示精确匹配
2. ~为区分大小写匹配
3. ~*为不区分大小写匹配
a) !~和!~*分别为区分大小写不匹配及不区分大小写不匹
4. ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
5. /:表示所有URL
6. = XXX:表示精确匹配URL为XXX
7.
^~ /XXX/
:匹配任何以“
XXX/
”开头的地址。
8.
9.
1.2.2 Location规则的目标服务器(upstream策略)
就是proxy_pass http://xxx/
1. 然后将server节点下的location节点中的proxy_pass配置为:http:// + upstream策略名称
a) 指定后端是使用http
b) “upstream名称”则会使用执行的server IP替换
c)
2. 则location指定的url会负载分担到均衡服务器上
3. 代理规则是:
a) url不变,域名不变。
b) DIP替换为upstream策略指定的目标IP。源IP也会变为Nginx所在IP。
c) 目的端口号替换为指定的端口号;源端口号也替换为新的。(底层就是TCP代理)。
d) 协议替换为指定的http或者https
1.2.3 Location规则的权限控制
Location除了能实现指定URL到达指定服务器的功能外。还能指定一些访问控制策略,如拒绝或允许某些SIP的访问等。包括如下:
1.2.3.1 设置访问IP权限
https://zhidao.baidu.com/question/1669221438184214227.html
location ~^/agentMsg/{
proxy_pass http://xxx/xx #必须要加
allow 7.7.7.7;
allow 8.8.8.8;
deny all;
}
2 Nginx的后端主备
server 192.168.0.1:8080;
server 192.168.0.2:8080 backup;
}
3 Nginx的URL重写 rewrite
有的时候,需要修改访问的URL。
比如一个大项目,是由N个比较独立的子项目组成的。
每个子项目都可以独立部署,那么每个子项目都有自己的URL集。
这种大项目中,各子项目会被部署到独立的一组服务器上。
所以,在大项目中,为了把访问分发到子项目对应的服务器上,各子项目的URL在大项目中会加一个子项目前缀,以便于Nginx分发到正确的后端服务器上。此时Nginx便需要具有URL重写的功能了。比如,在大项目中的url是http://mydomain/subproject_prefix/url_in_subproject,那么达到子项目的服务器上应该变为http://mydomain/url_in_subproject
3.1 参考资料
http://blog.csdn.net/white__cat/article/details/31786361
https://segmentfault.com/a/1190000002797606