nginx之反向代理和正向代理

一、基本概念

反向代理:

以代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给互联网上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。 理解起来有些抽象,可以这么说:A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。

nginx之反向代理和正向代理

正向代理:

一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转发请求并将获得的内容返回给客户端,客户端才能使用正向代理。我们平时说的代理就是指正向代理。 简单一点:A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。

nginx之反向代理和正向代理

正向代理和反向代理的区别:

nginx之反向代理和正向代理

二、反向代理配置

(一)、常用配置

server { listen 8090; #服务端口号 server_namelocalhost; #服务名称 location / { #路由地址 proxy_pass :8000;#转发地址 proxy_set_header Host $host; #可设置请求头-并将头信息传递到服务器端 proxy_set_header X-Real-IP $remote_addr; #把真实的ip 发送给 转发的web服务器 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP } location /send { proxy_pass :8080/doc_sign/toSend.action; } }

(二)、反向代理的路由策略

Location的配置:

语法:

location [=|~|~*|^~] /uri/ {…}

语法说明:

= 开头表示精确匹配,不支持正则。

^~ 开头表示uri以某个常规字符串开头,不支持正则,理解为匹配url路径即可。

~和~* 开头表示区分大小写的和不区分大小写的正则匹配。

!~和!~* 开头表示区分大小写不匹配及不区分大小写不匹配的正则匹配。

/ 通用匹配,任何请求都会匹配,通常放着配置的最后。

匹配优先级:

= > ^~ > ~, ~* > 空

全匹配 > 路径匹配 > 正则匹配 > 字符串匹配

示例:

# 字符串匹配 location /static { alias/home/www/static; access_log off; } # 路径匹配,此时proxy_pass的结束 / 决定是否带上匹配的路径 location ^~ /333/ { proxy_pass ; } # 正则匹配,此时proxy_pass不能带结束 / location ~ ^/(xxx|yyy)/ { proxy_pass ; } # 字符串匹配,此时proxy_pass的结束 / 决定是否带上匹配得路径 location /zzz/ { proxy_pass ; } # 默认匹配 location / { proxy_pass :8080; }