首页 > 代码库 > Nginx初探

Nginx初探

 

2016-08-23 王维 王女士的IT之旅

引言

在项目质量保障过程中,尤其是在测试环境的搭建和维护时,经常要与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  #启动

nginxnginx -s stop  #关闭

nginxnginx -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官网文档

Nginx初探