nginx正向代理和反向代理的区别
正向代理和反向代理的区别
总体来说正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。
正向代理:客户端 <一> 代理 一>服务端
反向代理:客户端 一>代理 <一> 服务端
以租房的例子来比喻
正向代理
A(客户端)想租C(服务端)的房子(A(客户端)知道C(服务端)有房子),但是A(客户端)并不认识C(服务端)租不到。
B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。
这个过程中C(服务端)不认识A(客户端)只认识B(代理),C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。
反向代理
A(客户端)想租一个房子,B(代理)就把这个房子租给了他。
这时候实际上C(服务端)才是房东。B(代理)是中介把这个房子租给了A(客户端)。
这个过程中A(客户端)并不知道这个房子到底谁才是房东
他可能认为这个房子就是B(代理)的。
通过这两个例子就可以大概理解“正向代理的代理对象是客户端,反向代理的代理对象是服务端”这句话。
具体实践案例
正向代理
现准备两台服务器B[192.168.88.130](代理服务器),C[192.168.88.131] (资源服务器)。在资源服务器C的index页面加个字符标记C方便分辨。
1.将资源服务器C的nginx加入一个if条件,配置如下:
location / {
if ( $remote_addr !~* "^192\.168\.88\.130") {
return 403;
}
root html;
index index.html index.htm;
}
该配置只允许ip地址为192.168.88.130的客户端访问。
在我本机浏览器上(192.168.1.115)访问结果如下,显然是访问不了的。
2.配置B(代理服务器),nginx的配置如下
server {
listen 80;
server_name localhost;
resolver 8.8.8.8;
location / {
proxy_pass http://$http_host$request_uri;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
只修改了两行代码
resolver 8.8.8.8;
proxy_pass
http://$http_host$request_uri
;
resolver
为DNS解析,这里填写的IP为Google提供的免费DNS服务器的IP地址
proxy_pass
配置代理转发
至此便是配置了B服务器所有访问根一级的请求全部都代理转发对应到http://$http_host$request_uri
去了,$http_host
就是我们要访问的主机名,$request_uri
就是我们后面所加的参数。
简单的说至此就是相当于配置好了我们请求了B服务器,B服务器再去请求我们所请求的地址。
windows10下配置http代理
本地设置完代理服务器后,再次访问资源服务器[192.168.88.131],发现可以访问了。
反向代理
还是使用BC两台服务器为例,资源服务器C还是那个配置不用变,此时外界是不能访问服务器C的。
重新配置代理服务器B:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.88.131;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置:proxy_pass
http://192.168.88.131
;
此时通过访问代理服务器B就可以访问资源服务器C
看到页面有字母C的标记。