代理简介
正向代理
正向代理代理的是client。
例如:有些网址我们在本地无法直接访问,需要在浏览器里面配置一个proxy,这个proxy就是正向代理。
server只和proxy交互,并不知道client的存在。
反向代理
反向代理代理的是server。
例如:server位于局域网之内,在外网无法直接访问,需要访问网关,然后通过网关来向内网转发request,这个proxy就是反向代理。
client只和proxy交互,并不知道server的存在。
Nginx正向代理
假如现在有2个HTTP server A
和 B
,以及1个client机器 C
。
- A的IP地址:192.168.1.8
- B的IP地址:192.168.1.58
A的配置如下:
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了:
Nginx反向代理
(和刚才同样的场景)
假如现在有2个HTTP server A
和 B
,以及1个client机器 C
。
- A的IP地址:192.168.1.8
- B的IP地址:192.168.1.58
A的配置如下:
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的存在。