Nginx教程 反向代理

“Nginx 是一个很强大的高性能Web和反向代理服务” 引言自百度百科。其实 Nginx 不仅可以作为方向代理,也可以作为正向代理服务器。接下来咱们就看看这两种代理方式。

正向代理

概念

一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。常见的场景如VPN。

关系

客户端 <一> 代理 一>服务端。注意红色的箭头,正向代理是对客户端的代理。目标服务很明确。简单举个例子:A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。 B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。这个过程中C(服务端)不认识A(客户端)只认识B(代理) C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。

反向代理

概念

与正向正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。常见的场景比如例如域名代理多个端口,利用域名代理多个服务器的应用等等。

关系

客户端 一>代理 <一> 服务端。注意红色的箭头,正向代理是对服务端的代理。也举个例子:A(客户端)想租一个房子,B(代理)就把这个房子租给了他。 这时候实际上C(服务端)才是房东。 B(代理)是中介把这个房子租给了A(客户端)。这个过程中A(客户端)并不知道这个房子到底谁才是房东,他都有可能认为这个房子就是B(代理)的。

反向代理实战

实战一:直接用域名代理目标地址

使用 nginx 反向代理,访问 http://springboot.com/ 直接跳转到 127.0.0.1:8080。

环境准备:springboot服务,docker,mac。我采用的是docker nginx挂载文件修改,大家想看挂载相关的操作可以看看这篇文章。《docker 挂载、修改文件》https://blog.csdn.net/lly576403061/article/details/129507650。直接修改文件如下,重点我已经标注。然后在浏览器输入:http://localhost:8010/demo1/api/demo1/start即可访问。

实战二:反向代理使用不同的路径请求不同的服务

使用Nginx的反向代理,在浏览器访问同一个域名和端口,只是根据访问路径的不同调用相应的服务。具体case如下:

http://localhost:8088/demo1/api/demo1/start 访问微服务demo1的相关接口。

http://localhost:8088/demo2/api/demo2/start 访问微服务demo2的相关接口。

具体操作之前咱们在《Docker Nginx 反向代理》里有聊过,可以看看。https://blog.csdn.net/lly576403061/article/details/129452986

番外:Location指令的匹配说明

location,该指令用于匹配 URL,具体测说明如下。

location [ = | ~ | ~* | ^~ ] uri { ... }
  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

  1. ~:用于表示 uri 包含正则表达式,并且区分大小写。

  1. ~*:用于表示 uri 包含正则表达式,并且不区分大小写。

  1. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

附件:官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#location

猜你喜欢

转载自blog.csdn.net/lly576403061/article/details/129570173
今日推荐