Nginx 反向代理

151 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

正向代理和反向代理

正向代理

一般的访问流程是客户端直接向目标服务器发送请求并获取内容,使用正向代理后,客户端改为向代理服务器发送请求,通过访问代理服务器从而访问到目标服务器。正向代理隐藏了真实的客户端,为客户端收发请求,使真实客户端对服务器不可见。

举个例子,你的浏览器无法直接访问谷哥,这时候可以通过一个代理服务器来帮助你访问谷哥,那么这个服务器就叫正向代理。

未命名文件 (7).jpg

反向代理

与一般访问流程相比,使用反向代理后,直接收到请求的服务器是代理服务器,然后将请求转发给内部网络上真正进行处理的服务器,得到的结果返回给客户端。反向代理隐藏了真实的服务器,为服务器收发请求,使真实服务器对客户端不可见。

未命名文件 (8).jpg

Nginx反向代理作用

  1. 保障应用服务器的安全:增加一层代理,可以屏蔽危险攻击,更方便的控制权限。
  2. 实现负载均衡:配置代理到upstream块,upstream块配置负载均衡。
  3. 实现跨域:前后端分离的工程中,前端服务器和后端服务器的host、port不同,有跨域问题,nginx配置代理路径替换实际访问路径。

反向代理基本配置

  1. proxy_pass

    语法: proxy_pass url;

    配置块:location、if

    将当前请求反向代理到url指定地服务器上。url可以是域名或ip地址加端口,也可以是unix句柄,还可以是负载均衡的upstream块。

  2. proxy_method

    语法:proxy_pass method;

    配置块:http、server、location

    配置转发时的协议方法名。比如配置

    proxy_pass POST;

    那么客户端发来的GET请求在转发时方法名也会改为POST。

  3. proxy_hide_header

    语法:proxy_hide_header header;

    配置块:http、server、location

    指定哪些请求头不会被转发。

  4. proxy_pass_header

    语法:proxy_pass_header header;

    配置块:http、server、location

    与proxy_hide_header作用相反,将原来禁止转发的header设置为允许转发。

  5. proxy_pass_request_body

    语法:proxy_pass_request_body on|off;

    默认:proxy_pass_request_body on;

    配置块:http、server、location

    是否转发HTTP包体部分。

  6. proxy_pass_request_headers

    语法:proxy_pass_request_headers on|off;

    默认:proxy_pass_request_headers on;

    配置块:http、server、location

    是否转发HTTP头部。