正向代理代理的是client。
例如:有些网址我们在本地无法直接访问,需要在浏览器里面配置一个proxy,这个proxy就是正向代理。
server只和proxy交互,并不知道client的存在。
反向代理代理的是server。
例如:server位于局域网之内,在外网无法直接访问,需要访问网关,然后通过网关来向内网转发request,这个proxy就是反向代理。
client只和proxy交互,并不知道server的存在。
假如现在有2个HTTP server A 和 B ,以及1个client机器 C 。
A的IP地址:192.168.1.8B的IP地址:192.168.1.58A的配置如下:
server { listen 6692; server_name localhost; location / { if ( $remote_addr !~* ^192\.168\.1\.58$) { return 403; } root /Users/kaiding/temp/temp0703; index index.html; } }可见,只能从 192.168.1.58 (即server B)来访问server A。
从B访问: 从C访问:要想让C能够访问server A,我们需要在server B上开启一个proxy server,然后让C通过B来代理其HTTP请求。
在server B上配置正向代理如下:
server { listen 6691; server_name localhost; resolver 8.8.8.8; location / { proxy_pass http://$http_host$request_uri; } }在C的浏览器里面配置HTTP代理如下:
现在,C就可以访问到A了:
(和刚才同样的场景)
假如现在有2个HTTP server A 和 B ,以及1个client机器 C 。
A的IP地址:192.168.1.8B的IP地址:192.168.1.58A的配置如下:
server { listen 6692; server_name localhost; location / { if ( $remote_addr !~* ^192\.168\.1\.58$) { return 403; } root /Users/kaiding/temp/temp0703; index index.html; } }可见,只能从 192.168.1.58 (即server B)来访问server A。
要想让C能够访问server A,我们需要在server B上开启一个proxy server来代理A,然后让C通过访问B来达到访问A的效果。
在server B上配置反向代理如下:
upstream myserverA { server 192.168.1.8:6692; } server { listen 6693; server_name localhost; location / { proxy_pass http://myserverA; } }现在,C就可以通过访问B,来达到访问A的效果了:
注意:C的浏览器里面URL是B的地址,也就是说,C并不知道A的存在。