想忽略某个文件夹,但又不想忽略这个文件夹下的某个子目录或文件
1 2 3 |
|
想忽略某个文件夹,但又不想忽略这个文件夹下的某个子目录或文件
1 2 3 |
|
https://www.cnblogs.com/xuey/p/9515996.html
1 2 3 4 5 |
|
1 2 3 4 |
|
在两个模块中,两个proxy_pass都是用来做后端代理的指令。
ngx_stream_proxy_module模块的proxy_pass指令只能在server段使用使用, 只需要提供域名或ip地址和端口。可以理解为端口转发,可以是tcp端口,也可以是udp端口。 ngx_http_proxy_module模块的proxy_pass指令需要在location段,location中的if段,limit_except段中使用,处理需要提供域名或ip地址和端口外,还需要提供协议,如"http"或"https",还有一个可选的uri可以配置。
ngx_stream_proxy_module模块的proxy_pass指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
ngx_http_proxy_module模块的proxy_pass指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
|
情形A和情形B进行对比,可以知道proxy_pass后带一个URI,可以是斜杠(/)也可以是其他uri,对后端request_uri变量的影响。
情形D说明,当location为正则表达式时,proxy_pass不能包含URI部分(proxy_pass在以下情况下,指令中不能有URI,正则表达式位置、命名的地点、if 块),
情形E通过变量($request_uri, 也可以是其他变量),对后端的request_uri进行改写。
情形F和情形G通过rewrite配合break标志,对url进行改写,并改写后端的request_uri。需要注意,proxy_pass地址的URI部分在情形G中无效,不管如何设置,都会被忽略。
https://segmentfault.com/a/1190000019563509
NGINX解决HTTPS代理的方式都属于透传(隧道)模式,即不解密不感知上层流量。具体的方式有如下7层和4层的两类解决方案。
客户端给代理服务器发送HTTP CONNECT请求。
代理服务器利用HTTP CONNECT请求中的主机和端口与目的服务器建立TCP连接。
代理服务器给客户端返回HTTP 200响应。
客户端和代理服务器建立起HTTP CONNECT隧道,HTTPS流量到达代理服务器后,直接通过TCP透传给远端目的服务器。代理服务器的角色是透传HTTPS流量,并不需要解密HTTPS。
NGINX作为反向代理服务器,官方一直没有支持HTTP CONNECT方法。但是基于NGINX的模块化、可扩展性好的特性,阿里的@chobits提供了ngx_http_proxy_connect_module模块,来支持HTTP CONNECT方法,从而让NGINX可以扩展为正向代理。
NGINX官方从1.9.0版本开始支持ngx_stream_core_module模块,模块默认不build,需要configure时加上 --with-stream
选项来开启。
要在不解密的情况下拿到HTTPS流量访问的域名,只有利用TLS/SSL握手的第一个Client Hello报文中的扩展地址SNI (Server Name Indication)来获取。NGINX官方从1.11.5版本开始支持利用ngx_stream_ssl_preread_module模块来获得这个能力,模块主要用于获取Client Hello报文中的SNI和ALPN信息。对于4层正向代理来说,从Client Hello报文中提取SNI的能力是至关重要的,否则NGINX stream的解决方案无法成立。同时这也带来了一个限制,要求所有客户端都需要在TLS/SSL握手中带上SNI字段,否则NGINX stream代理完全没办法知道客户端需要访问的目的域名。
1 2 3 4 5 6 7 8 9 |
|
openssl带servername参数来指定SNI
1
|
|
客户端 —-> 代理服务器(发起访问请求) —-> 网站
客户端 <—- 代理服务器(响应的内容) <—- 网站
1 2 3 4 5 6 7 8 9 10 11 |
|
NGINX官方从1.9.0版本开始支持ngx_stream_core_module模块,模块默认不build,需要configure时加上 --with-stream
选项来开启。
配置见 nginx https代理配置
https://www.cmdschool.org/archives/4673
图中绿色线代表父子关系的层次结构(上游下游关系)
图中蓝色代表兄弟关系的层次结构(平等关系)
Squid使用“cache_peer”指令提供父节点的缓存
never direct模式,父节点失败不能直接连接源服务器,如果父节点失败或无法访问,则每个请求都导致错误消息
prefer direct模式,父节点失败允许直接连接源服务器,如果父节点失败或无法访问,则连接到源服务器而不是父节点
注:失败是指没有ICP或HTCP回复
1 2 |
|
以上使用never_direct指令宣告父节点失败不能直接连接源服务器
1 2 3 |
|
以上使用prefer_direct指令宣告首选从DNS中列出源服务器尝试
以上使用nonhierarchical_direct指令宣告往父节点的请求继续发送
hierarchy_stoplist指令是prefer direct模式的另外一种实现(适用于Squid-3.2之前的版本)
1
|
|
hostname参数,指定转发的代理服务器主机名称(IP地址亦可)
type参数,可选值有“parent”(父母)、“sibling”(兄弟)和“multicast”(多播)
http-port参数,指定转发的代理服务器通讯端口,默认值3128
icp-port参数,查询对象的邻居缓存,如果不支持ICP或HTCP,设置为0
options参数,可选的其他选项(不一一列举)