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方向代理的主要内容,如果未能解决你的问题,请参考以下文章

nignx反向代理配置conf/nignx.conf

nignx

nignx的TCP和UDP调度(nginx反向代理)

shell脚本自动部署nignx反向代理及web服务器,共享存储

nignx

nignx 配置服务集群