nginx的配置虚拟主机负载均衡和反向代理二
山不厌高,海不厌深;周公吐哺,天下归心
基于域名的虚拟主机
假设我们在本地开发有3个项目,分别在hosts里映射到本地的127.0.0.1上:
1 | 127.0.0.1 www.iyangyi.com iyangyi.com |
有这样3个项目,分别对应于web根目录下的3个文件夹,我们用域名对应文件夹名字,这样子好记:
1 | /Users/yangyi/www/www.iyangyi.com/ |
每个目录下都有一个index.php文件,都素简单的输入自己的域名。
下面我们就来搭建这3个域名的虚拟主机,很显然,我们要新建3个server来完成。为了看起来简洁好看,我们使用require来包含外面的3个server在nginx.conf中,这样就清晰了很多。不会使得这个nginx.conf内容太多:
1 | main |
既然每一个conf都是一个server,前面已经学习了一个完整的server写的了。下面就开始:
1 | # www.iyangyi.conf |
1 | # api.iyangyi.conf |
1 | # admin.iyangyi.conf |
这样3个很精简的虚拟域名就搭建好了。重启下nginx,然后打开浏览器访问一下这3个域名,就能看到对应的域名内容了。
反向代理
正向代理
在说啥啥反向代理之前,先说下什么是代理或者正向代理。
正向代理也就是代理,他的工作原理就像一个跳板,简单的说,我访问不了google.com,但是我能访问一个代理服务器A,A能访问google.com,于是我先连上代理服务器A,告诉他我需要google.com的内容,A就去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
结论就是,正向代理是一个位于客户端和原始服务器(origin server)之间的服务器。为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
目前代理软件很多,浏览器上的代理就更多了。什么自由门啊,红杏等。
反向代理
ok,说完正向代理,再来说啥是反向代理!
举个例子,比如我想访问 http://www.test.com/readme,但www.test.com上并不存在readme页面,于是他是偷偷从另外一台服务器上取回来,然后作为自己的内容返回用户,但用户并不知情。这里所提到的 www.test.com 这个域名对应的服务器就设置了反向代理功能。
结论就是,反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
嗯。正向代理和反向代理就基本清楚了,那我们就来用nginx来配置一个反向代理。
nginx 使用反向代理,主要是使用location模块下的proxy_pass选项。
我们直接实战吧!
来个最简单的。当我访问 mac 上的nginx 的 centos.iyangyi.com 的内容时候, 就反向代理到虚拟机centos上的 apache 192.168.33.10 的index.html页面。
192.168.33.10 中的html 是很简单的一句输出:
1 | centos apache2 index.html |
在hosts里新加上这个域名。
1 | #vi /etc/hosts |
在vhost目录中新建一个conf server
1 | #centos.iyangyi.conf |
重启下nginx:
1 | sudo nginx -s reload |
打开浏览器,就可以看到页面输出了:
1 | centos apache2 index.html |
负载均衡
先简单说下负载均衡是干嘛的?举个例子:我们的小网站,刚开始就一台nginx服务器,后来,随着业务量增大,用户增多,一台服务器已经不够用了,我们就又多加了几台服务器。那么这几台服务器如何调度?如何均匀的提供访问?这就是负载均衡。
负载均衡的好处是可以集群多台机器一起工作,并且对外的IP 和 域名是一样的,外界看起来就好像一台机器一样。
nginx 也刚好提供了强大而又简单的负载均衡功能。
在第一节中,我详细讲了nginx的负载均衡模块upstream,负载均衡呢,主要是用这个模块。
基于 weight 权重的负载
1 | upstream webservers{ |
重启nginx nginx -s reload,打开浏览器输入upstream.iyangyi.com,不断刷新下,就能看到变化显示web1,web2,web3。说明我们的负载均衡起作用了。