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

马谦马谦马谦 2017年9月24日22:31:02 发表评论
文章最后编辑于:2017-11-18 16:37:12

一、概述

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

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

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

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

二、正向代理和反向代理

2.1 什么是代理

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

2.2 正向代理

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

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

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

2.3 反向代理

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

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

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

三、反向代理的优点

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

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

四、反向代理的配置

4.1 对端口实现代理

反响代理的配置大致为:

其中的参数说明为:

//TODO

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

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

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

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

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模块和反向代理配置

五、优化

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

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

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

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

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

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

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

本文共执行47次查询,耗时0.275秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: