什么是正向代理?如果把局域网外的 Internet 想象为一个巨大的资源库,则局域网中的客户端要访问 Internet 就需要通过代理服务器来访问,这种代理服务器就称为正向代理(详见图片),简单说就是在客户端配置代理服务器,通过代理服务器进行互联网的访问。
简单说,就是用户知道目标地址(www.google.com),通代理服务器去转发。
什么是反向代理?客户端对代理是无感知的,因为客户端不需要做任何的配置就可以访问(正向代理需要做配置),我们只需要把请求发送到反向代理服务器上,由反向代理服务器转发到目标服务器进行数据获取,最后再返回到客户端。此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的 IP 地址。
简单说,就是用户不知道目前地址,只知道代理服务器地址,让代理服务器去转发到真正的服务器上。
例如浏览器访问的前端项目为 http://127.0.0.1,该页面访问的接口为 http://127.0.0.1:8080,因为端口不一致就会导致跨域出现,所以我们可以使用 Nginx 进行反向代理来解决跨域。
location ^~ /api {
rewrite ^/api(.*)$ $1 break; #匹配 /api ,并把后面的内容进行引用,然后把 /api 进行重写为 $1
#例如 /api/a/b ==> /a/b
add_header "Access-Control-Allow-Origin" "*"; #添加头信息
proxy_pass http://127.0.0.1:8080; #把地址代理到 127.0.0.1:8080 地址
}
- break 表示 uri 重写后,直接使用当前资源,不再使用 location 里剩余的语句,完成本次请求,地址栏 url 不变。
- last 表示 uri 重写后,马上发起一个新的请求,再次进入 server 块,重试 location 进行匹配,超过 10 次匹配不到报 500 错误,地址栏 uri 不变。
- redirect 表示返回 302 临时重定向,地址栏显示重定向后的 url。