1、什么是Nginx?

答:引用维基百科中的介绍:Nginx(发音同engin  x)是一款由俄罗斯程序设计师Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。起初是俄国入口网站及搜索引擎Rambler使用。此软件在BSD-like协议下发行,可以在UNIX、GNU/Linux、BSD、Mac OSX、Solaris,以及Microsoft Windows等操作系统中运行。





2、什么是Web服务器(网页服务器)?

答:根据资料自我整理的:web服务器也被称为www(环球信息网的缩写,英文全称为World Wide Web)服务器,或被称为HTTP服务器。web的本意是蜘蛛网和网的意思,在网页设计中我们一般称之为网页的意思,所以将以网页形式将资源共享出来供人们浏览的服务器称之为web服务也称为网页服务器;被称为www服务器的原因是因为一这种形式将服务提供到互联网,全球任何地方都能通过互联网浏览个共享的资源;被称为HTTP服务器的原因是因为提供这中服务通过的是HTTP协议。进行总结:web服务器就是通过HTTP协议,以网页的形式将资源共享出去的一种服务。




3、什么是HTTP协议?

答:引用维基百科中的介绍:http是超文本传输协议(HyperText  Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计http最初的目的是为了提供一种发布和接收HTML页面(网页)的方法。同过http或者https协议请求的资源由同一资源标识符(Uniform  Resource Identifiers,URI)来标识。

HTTP的发展是万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(internet Engineering Task Force,IETF)合作的结果,最终发布了一系列的RFC,其中最著名的是1999年6月公布的RFC2616,定义了HTTP协议中现今广发使用的一个版本HTTP1.1。




4、网页服务器的工作模式?

答:自我学习总结的:网页服务器的工作架构是C\S架构,就是客户端\服务器工作模式。用户通过自己的浏览器客户端向网页服务器发送资源请求,就是告诉服务器,我要浏览你的什么资料,你给不给。服务器端就进行分析判断,看客户端是不是又任性了,请求不存在的资源,或者请求的资源他没有浏览权限;服务器判断之后,会对每种情况作出对应的响应。具体工作流程如下图:

wKiom1SffyTjr321AAGg_vjNyZM306.jpg




5、反向代理服务器是什么?

答:自我学习总结的:现在已经知道了web服务器的基本原理,那再来解析什么是代理服务器,你将web服务器比喻成一个书法大师,他就是给人代写书信的;将反向代理服务器比喻成书童,它不会写书信。别人来请书法大师写书信,因为大师,所有架子大不见外人,也很清高,就告诉书童:你就对外宣称你是书法大师,要是有人找你来写书信,你就告诉我,让我来写。这样一来所有的外人都认为书童数书法大师,不知道正真的书法导师躲在小角落等待着书童的请求。

反向代理服务器具体工作流程如下图:

wKioL1Sfjn7hjcvfAAHxNv2IV0o606.jpg




6、Nginx相比其他Web服务器具有哪些优点?

答:通过以上5点的说明,你应该知道对Nginx有大概的映像了,因为本人对邮件服务知道的很少,所以上述中没有提到电子邮件(IMAP/POP3)代理服务器,想要了解请自行查找资料。那Nginx到底具有哪些特性?

引用“实战Nginx取代Apache的高性能Web服务器”书中的讲解:

(a)Nginx可以高并发连接

              官方测试Nginx能够支持5万并发连接,在实际生产中可支撑2-4万并发连接数。这得益于Nginx使用了最新的epoll(linux)网络I/O模型。

(b)Nginx内存消耗少

Nginx+PHP(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150MB内存                                                  (15MB*10=150MB),开启的64个php-cgi进程消耗1280(20MB*64=1280MB),加上系统自身消耗的内存,总共消耗不到2GB的内存,如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500MB。

(c)支持Rewrite重写规则

              能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组

(d)内置的健康检查功能

              如果Nginx Proxy后端的某台Web服务器当机了,不会影响前端访问。

(e)节省带宽

              支持GZIP压缩,可以添加浏览器本地缓存的Header头

(f)稳定性高

               用于反向代理,当机的概率微乎其微

(g)支持热部署

               Nginx支持热部署。它的启动特别容易,并且可以7*24小时并不间断地运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下,对软件版本进行升级。




7、源码编译安装Nginx

安装环境:主机硬件:使用的是Vmware虚拟机,内存512,磁盘大小120GB

                操作系统采用:CentOS6.6

                Nginx采用的是nginx-1.6.2.tar.gz这个源码包

编译安装Nginx的要求:磁盘空间需要保证有10MB以上的剩余磁盘空间,实际的磁盘空间需求会因为编译设置和安装第三方模块而有所不同。

还需要GCC编辑器,是GNU推出的功能强大、性能优越的用于编程开发的编辑器,目前可以编译的语言包括:C、C++、Objective-C、Fortra、Java等。

模块依赖性:Nginx的一些模块需要第三方库的支持:例如gzip模块需要zlib库,rewrite模块需要pcre库,ssl功能需要opensll库等。

步骤一:下载Nginx-1.6.2.tar.gz这个源码包,并解压缩。建议从官方网站下载源码,官方网址为:http://www.nginx.net

wKioL1Sfm3_zGPqzAADoNq3orDY305.jpg


步骤二:创建运行Nginx的用户和组

wKioL1Sfn1iCsMbiAABI8MeEjJI804.jpg

wKiom1SfnreDK2t4AABKeYWapBo245.jpg


步骤三:对Nginx进行预编译,设置一些编译选项

(1)使用./configure  --help 可以看到,有哪些编译选项

wKioL1SfnH6D8NfMAAO34GnxfDU879.jpg

这里的选项众多,不一一解释,但是下面编译用的常用选项,会进行详解:

(2)使用./configure脚本,来预编译,和配置一些配置选项。

wKiom1SfoLDB7mMvAAMQZban1Ww751.jpg编译选项详解:

--prefix=/usr/local/nginx                                   指定nginx的编译安装目录

--conf-path=/etc/nginx/nginx.cong                  指定nginx的配置文件路径

--user=nginx                                                        指定运行nginx程序的用户

--group=nginx                                                     指定运行nginx程序的组

--error-log-path=/var/log/nginx/error.log       指定错误日志的位置

--http-log-path=/var/log/nginx/access.log      指定nginx访问日志的位置

--pid-path=/var/run/nginx/nginx.pid               指定nginx的pid文件的位置

--lock-path=/var/lock/nginx.lock                      指定nginx的lock文件的位置

--with-http_ssl_module                                       将ssl模块编译进Nginx

--with-http_stub_status_module                        将status模块编译进Nginx

--with-http_gzip_static_module                          将gzip模块(压缩)编译进Nginx

--with-http_flv_module                                       将flv模块编译仅Nginx

--with-http_mp4_module                                    将mp4模块编译仅Nginx

--http-client-body-temp-path=/var/tmp/nagix/client    指定http客户端请求缓存文件存放的路径

--http-proxy-temp-path=/var/tmp/nginx/proxy             指定http反向代理缓存文件存放目录的路径

--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi          指定http  FastCGI缓存文件存放目录的路径


(3)编译在中途报错,是因为编译添加了rewrite模块,这个模块需要依赖pcre-devel的这个开发包。

wKiom1SfokXQSDzqAAGIKYokxRI753.jpg

(4)使用yum安装pcre-devel这个安装包。

wKioL1SfoujRacjXAAJjKejro_I232.jpg


步骤四:当预编译完成或,使用make && make  install  调用gcc编译并安装nginx

wKioL1Sfp_ywEFvnAAGkvbkRW1g478.jpg

wKiom1Sfp9ej8D8yAACEI8Rv2rE378.jpg

当预编译安装完成后:

Nginx的安装目录为:/usr/local/nginx

Nginx的配置文件目录为:/etc/nginx/nginx.conf

Nginx的错误日志存放的位置为:/var/log/nginx/error.log

Nginx的访问日志存放的位置为:/var/log/nginx/access.log

Nginx运行时生成的pid文件存放位置:/var/run/nginx/nginx.pid

Nginx的lock文件的存放位置:/var/lock/nginx.lock

http客户端请求缓存文件存放的路径:/var/tmp/nagix/client       这个目录系统不会创建,要自己手动创建

http反向代理缓存文件存放目录的路径:/var/tmp/nginx/proxy   这个目录系统不会创建,要自己手动创建       

http  FastCGI缓存文件存放目录的路:/var/tmp/nginx/fastcgi    这个目录系统不会创建,要自己手动创建


步骤五:添加系统环境变量PATH

wKioL1Sfqw-wWS99AABdKY5KeAU309.jpg

wKioL1Sfq0Pi93sFAABHpkoqxvc155.jpg

wKioL1Sfq47Dx1_-AAFUi5ov4N4044.jpg

步骤六:环境变量设置完成后,可已启动nginx了

wKiom1Sfq0myN7I-AADbNcYlt9g298.jpg

这里提示启动失败,是因为/var/tmp/nagix/client、/var/tmp/nginx/proxy 、/var/tmp/nginx/fastcgi 这三个目录没有创建,自己手动创建就好了。

wKioL1SfrRmhBy_aAAI-5SJlr9E626.jpg


如上图所示nginx启动成功,使用浏览器测试看能访问到默认主页吗?我的主机ip地址为172.16.249.96。

wKiom1SfrPeCVlfpAAKwFxySYds479.jpg


测试访问成功,至此nginx的编译安装完成。




下章中主要讲解配置文件中的常用指令(nginx配置文件详解)