引言
在项目质量保障过程中,尤其是在测试环境的搭建和维护时,经常要与nginx打交道,比如短链接、api的ACL控制等配置都与nginx相关。笔者从研究项目的nginx配置出发,然后在本地搭建了nginx服务,开展了进一步探索,将学习的过程记录于此,一是对自己知识的梳理,二是希望对有缘人有点帮助。
正文
nginx是一个web网站常用的高性能http和反向代理服务器,其具有较好的并发能力,被网易、百度、腾讯、新浪等网站广泛使用。
1.首先弄清楚正向代理和反向代理
正向代理:代理客户端,替客户端收发请求,使真实的客户端对服务器不可见。如图所示,proxy和client同属于一个网络,对server透明
反向代理:代理服务器,提服务器收发请求,使真实的服务器对客户端不可见。如图所示,proxy和server同属于一个网络,对client透明
实际上proxy都是代为收发请求和响应,只是在结构上左右换了下,所以一个叫正向代理,另一个叫反向代理。
2.nginx的反向代理原理
如下图所示:nginx作为反向代理服务器接收来自客户端的http请求,然后将请求转发给内部网络的web服务器,同时接收来自web服务器的response结果,并返回给客户端。此时nginx代理服务器对外展现为一个服务器。
3.nginx的反向代理的作用
(1)负载均衡。nginx可以将来自客户端的请求均衡的分发到web服务器集群中的不同机器上进行处理,平衡集群中各个服务器的压力。这对于大访问量的web网站来说,是需要的。
(2)安全保障。客户端直接访问的不是提供内容的web服务器,为保护网站服务器提供了一层屏障,有利于保护网站的安全。
(3)加速web请求。nginx可以配置缓存,存储真实web服务器的某些资源和响应,减轻真实服务器的压力,同时加速web请求
4.本地搭建nginx服务
工作机器是windows环境:
Step1: nginx官网下载nginx压缩包。
Step2: 进行解压到nginx目录
Step3:启动nginx,命令:
cd nginx start nginx.exe 启动成功标志:在浏览器输入127.0.0.1 会出现nginx的欢迎页面
Step4:配置nginx的conf文件
nginx.conf里面有很多配置参数,主要有:工作模式、最大连接数配置(events)和http服务器设置
(1)将baidu的html页面保存至nginx/html的新建文件夹nginxFiles下,然后进行如下的配置:server{
listen 80;
server_name localhost;
location / {
root html/nginxFiles;
index baidu.html;
}
}
以上配置代表:将域名localhost,端口80的“/”下请求,定位到本地root的位置,默认的首页是baidu.html。配置后重启nginx,在浏览器中再次输入127.0.0.1就会自动出现baidu的页面。
(2)配置负载均衡 首先在http中配置负载均衡机器列表,如下所示:每个server代表一台机器,后面加上ip地址:端口,weight代表权重,权重越大,则nginx把客户端请求转发给他的可能性就越大。upstream vivi{
server 127.0.0.1:8050 weight=1;
server 127.0.0.1:8060 weight=2;
}
然后配置server中的location,如下:表示拦截域名后带/所有请求,转发至vivi中的机器进行处理,实现负载均衡。proxy_pass表示请求转向自定义服务器列表。项目中的短链接服务,就是用proxy_pass请求转向短链接服务器即可。location / {
proxy_pass http://vivi;
}
Step5:修改配置后,重启nginx服务生效。常用的nginx命令start nginx.exe #启动
nginx
nginx -s stop #关闭
nginx
nginx -s reload #重启nginx
5.nginx支持多域名配置
可以在一个文件中配置多个server,如下:server{
listen 80;
server_name www.vivi.com; #绑定域名
index index.htm index.html index.php #默认文件
root /home/www/vivi.com #网站根目录
include location.conf #调用其他规则,也可去除
}
server{
listen 81;
server_name www.test.com; #绑定域名
index index.htm index.html index.php #默认文件
root /home/www/msn.web126.com #网站根目录
include location.conf #调用其他规则,也可去除
}
也可以在一个server中的server_name后面配置多个域名,如:server{
listen 80;
server_name www.vivi.vom www.test.com
}
6.nginx的域名匹配顺序
(1)准确的server_name匹配,如下配置:只精准vivi.info 和 www.vivi.info两个域名:
server{
listen 80;
server_name vivi.info www.vivi.info;
...
}
(2)以通配符开始的字符串,如下配置:能匹配以vivi.info结尾的所有域名
server{
listen 80;
server_name *.vivi.info;
...
}
(3)以通配符结束的字符串,如下配置:能匹配以www开头的所有域名
server{
listen 80;
server_name www.*;
...
}
(4)匹配正则表达式,如下配置:能匹配以vivi.org结尾的所有域名
server{
listen 80;
server_name vivi.org$;
...
}
结语
本文只根据项目的需要,研究了项目中常用的配置,为了提高nginx性能,还有很多高级的配置参数,可以根据需要进行深入学习
推荐学习资料:nginx官网文档