nignx方向代理
Posted zoer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nignx方向代理相关的知识,希望对你有一定的参考价值。
nignx方向代理
proxy_pass
字符串匹配情况
example 1:
location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
proxy指定了uri,uri将会被代替,请求http://127.0.0.1/name/则实际请求的是http://127.0.0.1/remote/
example2:
location /name/ {
proxy_pass http://127.0.0.1;
}
proxy没有指定uri,则会继承,请求http://127.0.0.1/some/path/,匹配后实际请求的也是http://127.0.0.1/some/path/
模式匹配情况
使用 = ~ ~* ^~ 做模式匹配
proxy不能指定uri,否则语法报错,则他一定会继承下去
3 proxy_sed_header
重新定义或者附加请求头到后端真实服务器
默认只有两个字段
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
后端真实服务器获取客户端ip
在代理服务器加:
proxy_set_header X-Real-IP $remote_addr;
并在后端nginx的http模块中加
set_real_ip_from 代理服务器的ip;
4 upstream的反向代理
在http下添加upstream:
upstream webservice {
ip_hash #会话保持,默认为加权轮询,还有least_conn最小连接算法
server 127.0.0.1:44 weight=1;
server 127.0.0.1:55 weight=2;
server 127.0.0.1:66 backup; #不能与ip_hash公用
}
在server下增加location:
location /class/ {
proxy_pass http://webservice;
}
- upstream参数:
- weight=number 指定权重,默认权重是1
- max_fails=number 健康检查,失败次数
- fail_timeout=time 健康检查,超时时间
- backup 备服务器
- down 该服务器标记为不可用
proxy_cache_path proxy缓存
context::http
参数
- levels=levels 目录级别最多为3级,字符最大为2
- levels=1:2:2 则代表缓存目录为1个字符/2个字符/3个字符,比如a/bc/rd
- key_zone 必填参数,存储键的区域,
- key_zone=name:size name为存储键区域的名称,size指定存储文件的大小
- max_size 缓存空间的大小,如果缓存满后,使用cache_manager的清理算法
proxy_cache_path /var/log/nginx/cache levels=1:2:1 keys_zone=frist:20m max_size=500m;
核实是否缓存命中
在http加入add_header X-Cache $upstream_cache_status
可在response headers中查看,miss为为命中,HIT为命中
注意:
- cache_manager 指定缓存慢后的处理算法,LRU 最近最少使用算法
- fastcgi_cache_path fastcgi缓存与proxy原理一样。但是fastcgi缓存要慎用,动态程序缓存会导致结果延迟
rewirte
1 if
Syntax: if (condition) { ... }
Context:server, location
conditioni可以有:
- = 精确匹配 !~ 取反
- ~ 支持正则表达式,区分大小写 !~取反匹配的值,区分大小写
- ~* 支持正则表达式,不区分大小写 !~* 取反匹配的值,不区分大小写
- -f !-f 是否是文件
- -d !-d 是否是目录
- -e !-e 是否是文件或目录或符号连接
- -x !-x 是否是可执行文件
2 rewrite
Syntax: rewrite regex replacement [flag];
Context: server, location, if
[flag]
last 本次重写完成之后,重启下一轮检查。目录结构相同会出现循环,循环10次,报500error
break 本次重写完成之后,直接执行后续操作。解决重新发生请求时出现循环的问题
redirect 临时重定向
permanent 永久重定向
双目测试
- ~ 被匹配为真
- !~ 取反
- !~ = ~* ^~
以上是关于nignx方向代理的主要内容,如果未能解决你的问题,请参考以下文章