nginx 学习篇:location 模块和反向代理配置

马谦马谦马谦 nginx评论519字数 1939阅读 6 分 27 秒阅读模式

一、概述

location 模块是 nginx 中用的最多的,也是最重要的模块了,什么负载均衡啊、反向代理啊、虚拟域名啊都与它相关。

location 根据它字面意思就知道是来定位的,定位 URL,解析 URL,所以,它也提供了强大的正则匹配功能,也支持条件判断匹配,用户可以通过 location 指令实现 Nginx 对动、静态网页进行过滤处理,像我们的 php 环境搭建就是用到了它。

最常用的一个场景就是:服务器已经有了一个监听 80 端口的 web 服务了,此时我们如果想要再开启一个 web 服务就得要另外开启端口,这样的话就导致进入网站还得携带端口号,非常不方便,对于强迫症患者来说看起来也不舒服。

而有了反向代理之后,这个问题很轻松就能解决了,我们只需要配置一个二级域名,让 nginx 转发一下就 OK 了。

二、正向代理和反向代理

2.1 什么是代理

代理分为两种:正向代理 和反向代理 ,代理的过程就是客户端和服务端之间不直接进行通信,中间使用一台或者多态代理机器作为中转。

2.2 正向代理

正向代理是客户端在访问服务端的时候,客户端主动进行代理,连接代理主机以代理主机的身份访问服务端。然后服务端进行响应后,代理主机再把返回的数据发送到客户端,整个的流程为:

nginx学习篇:location模块和反向代理配置-图片1

生活中正向代理的使用范围很广泛,最常用的就是翻墙了,然后各种网游加速器啊什么的也都是这个原理。

2.3 反向代理

反向代理的和正向代理相反,当客户端访问服务端的时候,服务端不是从自己主机取数据给客户端,而是从先从代理主机上获取相应的数据,然后假装成是自己的返回给客户端。

nginx学习篇:location模块和反向代理配置-图片2

对于我们个人来说,用到反向代理的时候并不多,做内网穿透的 ngrok 服务器就是这个原理。

三、反向代理的优点

反向代理的优点就比较多了:

  • 首先第一个是安全性高,真正提供服务的主机都放在代理主机内网后面,外部很难入侵。同时代理机上还可以配置防火墙。
  • 第二,就像上面所说的,80 端口被占用之后还可以做到不加端口就能访问 web 服务。
  • 第三就是提供负载均衡服务,为不同的业务、不同的服务器做不同的请求处理。
  • many many ...

四、反向代理的配置

4.1 对端口实现代理

反响代理的配置大致为:

其中的参数说明为:

//TODO

假设现在要把端口 8099 代理到 8981,完整的 server 模块内容应该为:

重启 nginx,开启一个 godoc web 版文档,监听 8981 端口

然后在浏览器中输入 192.168.87.31:8099,注意端口是 8099 不是 8981

nginx学习篇:location模块和反向代理配置-图片3

4.2 对域名实现代理

以上是根据端口来进行反向代理,端口代理好像没什么意义,因为反正要带端口号,带不代理都没意义。

现在我们改成根据域名来进行代理,实现用户通过域名 maqian.test.com 访问 80 端口的时候代理到 godoc 页面。

server 段的配置如下:

在 windows 主机修改 hosts,定义域名 maqian.test.com 指向 192.168.87.131

然后在命令行使用 ipconfig /flushdns 刷新 dns 缓存,访问 maqian.test.com

nginx学习篇:location模块和反向代理配置-图片4

五、优化

上面的 server 和 location 配置全部都放在 nginx.conf 文件中,因为现在只有一个反向代理配置,所以修改起来还算是比较和谐。

但是一般情况下一个 nginx 下有很多个反向代理服务,同时也还会有多个负载均衡服务,这些东西一多起来配置也就多了,导致的结果就是管理就比较很麻烦,偌大一个文件,想定位到要操作的部分都很麻烦,一不小心看错了说不定会改错其他的配置。

对于这种情况,nginx 提供了一种很好的方法来管理,就是单独把每个配置放到不同的文件中,然后使用 include 把配置文件包含进来就可以了,就像 C 语言里面的包含头文件一样。

nginx.conf 的配置里,需要先删除之前的 server 段配置,然后在 http 模块下加一行

重启服务器,再次访问 maqian.test.com,依旧能出现 godoc 的页面。

这样的话,我们对配置文件进行增加修改或者删除操作就很方便了,再也不用都写到 nginx.conf 中去了。

如果要添加代理,直接在/etc/nginx/conf 目录下添加一个新文件就可以,删除、修改也是一样,直接对配置文件进行操作就可以了。

  最后更新:2017-11-18
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2017 年 9 月 24 日 22:31:02
  • 转载请务必保留本文链接:https://www.dyxmq.cn/it/nginx/nginx-location-reverse-proxy.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证