正向代理和反向代理,一次说清

  • Kevin
  • 5 Minutes
  • 2017年8月10日

作为一个Web前端开发人员,一些服务器端的知识也是必不可少的。我之前也有了解过服务器端,可是对有的东西仍是一知半解的。今天在知乎中看到一篇文章,把正向代理和反向代理讲解的很透彻。由此,我便想站在一个前端开发者的角度,谈谈正向代理和反向代理。

有哪些需求场景

先不谈概念,先说需求。

  1. 对于一个程序员来说,会科学上网是必不可少的。有的东西,在国内是访问不了的,那么如何访问像谷歌这样的网站呢?
  2. 有时候,我们写了一个前端应用(Web App),如何部署到服务器上呢?如果我们有多个应用,又如何部署呢?

这可能是大多数前端人员都会有的需求,因为我最近也是对第二个需求犯困。对于我们来说,可能最简单的方式就是直接托管到github上,我们知道,Github是可以开启静态页面功能的。注意这里的“静态”二字,也就是说,如果我们的应用需要连接数据库,需要实现后端路由(当然,也可以在前端实现路由技术),就需要我们自己部署服务器,并且写服务器端的代码。幸运的是,现在有了Node.js,我们可以直接通过JavaScript来写后端代码。这可能扯的有点远,有点超出前端的范畴了,但是,前端的终极目标是“全栈”啊。

由于JavaScript的越来越强大,原本应该在服务端做的事情,现在很多都是在前端来完成了。后面有时间会专门写一篇关于Vue的前端路由(vue-router)的文章。

正向代理和反向代理

原文看这里

正向代理

比如,客户端要访问Google,但是不直接去访问,而且让一个代理服务器去访问Google,然后代理服务器再将访问到的信息返回给客户端。这里的代理服务器所实现的功能就叫做正向代理

特点:Google并不知道是哪个客户端访问的。

根据这个特点,我们就可以在国外部署一个代理服务器,这个服务器有正向代理的功能。我们就可以通过这个代理服务器实现科学上网,盗一张图说明一下。

正向代理

反向代理

对于百度来说,服务器肯定不止一台,后面可能会有成千上万的服务器。当我们去访问百度服务器的时候,百度服务器会将我们的请求转发给背后的真实的服务器。这个过程中,百度服务器实现的功能就是反向代理

特点:客户端不知道访问的真实的服务器是哪一个。

反向代理

反向代理就是这个意思,至于如何实现反向代理,我也在摸索中,不过网上也有不少Nginx实现反向代理的教程。好吧,又得需要学习不少Nginx的知识,着实感觉自己在前端开发的大坑里越走越远、越走越偏了。

反向代理部署Web应用

Nginx是一个HTTP服务器,主要用来处理静态资源和作为反向代理,还有一个叫Apache的东西,不过现在好像用Nginx的多。

乱七八糟的概念

Nginx本质上就是一个运行在Linux服务器上的一个应用程序,它可以监听来自客户端的http请求,然后返回服务器上固定的资源(HTML文档、音视频、图片等)。

http的请求默认是80端口,所以一般Nginx只监听80端口(当然也可以监听其他端口),然后根据不同的路由参数或其他判断,反向代理到其他的服务器(真实的服务器)。比如,我们访问www.baidu.com的时候,从PC端和手机端访问的页面是不一样的。

部署Web应用

何为静态资源?就是服务器上存在的一个实实在在的文件,Nginx本身不会执行任何脚本语言,而是直接返回某个资源文件。很多时候,我们可能需要执行一些像phpPython等服务器脚本,通过这些脚本从数据库中获取数据,拼接成不同的HTML文件,最后返回给浏览器。

一个典型的例子就是Vue的服务端渲染,我们一般使用的可能都是浏览器直接渲染。但是对于一个复杂而庞大的Web应用,浏览器渲染显然不合适,这时候就需要部署一个Web服务器,可以是Node.js搭建的服务器,因为我们可以直接在服务器端使用JavaScript语言。然后,我们再通过Nginx服务器反向代理到我们的Web服务器

可能,这里有点迷惑:我们直接访问我们的Web服务器不就行了,干嘛还要通过Nginx服务器来作反向代理呢?

的确,我们也可以直接访问我们Web服务器。但是你想,一般我们可能只有一个域名,也就是说,对外只提供一个可访问的接口。用反向代理的话,我们就只需要对外提供Nginx服务器的访问链接。而我们的Web应用可能不止一个,你不可能为每一个Web应用都绑定一个域名吧。

其实就像前面说的,现在JavaScript越来越强大,很多原本在服务器端要做的事情在前端也能够完成。对于我们前端开发人员来说,只要后台提供数据接口,页面的动态渲染在前端完全可以自己实现。

正向代理实现科学上网

科学上网的工具有很多,我现在正在使用的是ShadowSocks(影梭)。至于服务器搭建教程网上真的很多,自行百度就好。

那么,首先你得有一台服务器,必须是国外或香港的服务器。这里有一些关于服务器的概念,我想有必要说一下:

因此,基于以上的介绍,我们如果要搭建ShadowSocks服务器,就必须选择VPS或云服务器。我建议一般选择VPS就好了,便宜嘛,对于一个上网工具来说,足够了。如果我们要部署我们自己的服务器,建议选择云服务器,安全灵活。

后记

这篇文章写得有点乱,我现在也是正在研究这方面的东西,越到后面逻辑就越不清晰了,暂且就当作是自己的学习笔记好了。