前端必须了解Nginx正向代理和反向代理

2022-07-14 21:13:00 浏览数 (1)

4月13日,市场监管总局会同中央网信办、税务总局召开了互联网平台企业行政指导会。会议针对平台经济领域存在的强迫实施“二选一”等突出问题,提出“五个严防”“五个确保”,明确要求各互联网平台企业在一个月内全面自检自查,逐项彻底整改。这是国家出面对具有垄断性质的平台企业一次整改行动,对我们的影响应该还是比较大的。有可能我们使用的支付宝,微信,京东,拼多多等一系列的App在一个月以后可能会有新的变动。

前情回顾

上篇文章主要分享了公众号的开发流程及开发过程中需要注意的事项。今天分享一些关于Nginx配置的相关知识点,主要内容是正向代理反向代理

而之所以要分享关于nginx知识点,是因为在近期的工作当中项目的发布是需要自己主动去对接这方面内容,但是自己对这方面的了解不够充分。沟通能力,执行力,以及决策能力的欠缺,可以在工作中学习比自己优秀的同事,但是技术的欠缺是必须踏踏实实的补回来的。

正向代理和反向代理的概念

如果把局域网外Internet想象成一个巨大的资源库,那么资源就分布在Internet的各个站点上,局域网内的客户端要访问这个库里的资源必须统一通过代理服务器才能对各个站点进行访问。

正向代理

局域网内的机器通过代理服务访问外网,主要是为了增加内网的安全性。同时,代理服务也可以对外网的访问进行监控管理。正向代理服务器不支持外网对内网的访问

跟正向代理相反,如果内网向外网提供资源,让外网可以访问内网,也可以设置一个代理服务器,它提供的服务就是反向代理。如图:

反向代理

简单总结一下:正向代理是让内网访问外网。反向代理是让外网访问内网。

配置正向代理的三个指令

  • resolver指令该指令用于指定DNS服务器的IP地址。DNS服务器的主要工作是进行域名解析,将域名映射为对应的IP地址。
代码语言:javascript复制
# address DNS服务的IP地址 默认使用53端口
resolver address ... [valid=time];
  • resolver_timeout指令该指令用于设置DNS服务器域名解析超时时间,语法结构为:
代码语言:javascript复制
resolver_timeout time;
  • proxy_pass该指令用于设置代理服务器的协议和地址,它不仅仅用于Nginx服务器的代理服务,更主要的是应用于反向代理服务。
代码语言:javascript复制
proxy_pass uri;

配置正向代理的示例

代码语言:javascript复制
    server
    {
      resolver 8.8.8.8;
      listen 82;
      location /
      {
          proxy_pass http://$http_host$request_uri;
        }
    }

设置DNS服务器地址为8.8.8.8,使用默认的53端口作为DNS服务器的服务端口,代理服务的监听端口设置为82端口,Nginx服务器接收到的所有请求都由location块进行过滤处理。

反向代理的配置指令

  • proxy_pass该指令用来设置被代理服务器的地址,可以是主机名称、IP地址加端口号等形式。

按照反向代理的概念,我们平时解决跨域问题在nginx中配置的代理,其实是个反向代理

代码语言:javascript复制
# 假如原有域名 为a.com
# 设置proxy_pass后,a.com/api/ 下的请求都被转发到b.com
server 
{
    listen 80;
    server_name a.com;
    location /api/
    {
      proxy_pass http://b.com;
    }
}
  • proxy_hide_header指令该指令用于设置Nginx服务器在发送HTTP响应时,隐藏一些头域信息。
代码语言:javascript复制
# field为需要隐藏的头域
proxy_hide_header field;
  • proxy_pass_header默认情况下,Nginx服务器在发送响应报文时,报文头中不包含“Date”、“Server”、“X-Accel”等来自被代理服务器的头域信息。该指令可以设置这些头域信息以被发送,其语法结构为:
代码语言:javascript复制
# field为需要发送的头域
proxy_pass_header field;
  • proxy_pass_request_body指令该指令用于配置是否将客户端请求的请求体发送给代理服务。
代码语言:javascript复制
proxy_pass_request_body on | off;
  • proxy_pass_request_headers指令该指令用于配置是否将客户端请求的请求头发送给代理服务器
代码语言:javascript复制
proxy_pass_request_headers on | off;
  • proxy_set_header指令该指令可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给被代理的服务器。
代码语言:javascript复制
proxy_set_header field value;
  • proxy_set_body指令该指令可以更改Nginx服务器接收到的客户端请求的请求体信息,然后将新的请求体发送给被代理的服务器。
代码语言:javascript复制
proxy_set_header value;
  • proxy_method指令该指令用于设置Nginx服务器请求被代理服务器时使用的请求方法,一般为POST或者GET。设置了该指令,客户端的请求方法将被忽略。
代码语言:javascript复制
proxy_method POST;

反向代理的配置项一共有21个,了解掌握以上的几个应该足以应付前端工作了。

总体上遇到的问题

  • 变量拼写错误。
  • this的指向问题。有个地方用call,切换了上下文。
  • 配置JSapi域名回调时,域名已备案但仍然提示未备案。这个需要在微信的论坛里直接找运营让他们确认域名备案结果即可。

总结

对于一个有经验的前端来说,代理这个事儿,其实还是有必要去掌握的,有可能复杂的需要后端人员协助,但是简单的配置还是要能够独立完成的。

今天就先整理这么多吧,相关的知识点肯定还会有,比如我们经常会听到负载均衡,到底什么是负载均衡,等我自己尝试配置过以后再分享吧。

javascript基础知识总结

0 人点赞