1、Nginx是什么

Nginx (engine x) 是一款自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好。

2、Nginx的优点

(1)更快

体现在两方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期,Nginx可以比其他Web服务器更快的响应请求。

(2)高扩展性

Nginx完全是由多个不同功能、不同层次、不同类型且耦合程度极低的模块组成的,也造就了Nginx庞大的第三方模块。

Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。

(3)高可靠性

Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速的“拉起”新的worker子进程提供服务。

(4)低内存消耗

一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB内存,这是Nginx支持高并发连接的基础。

(5)单机支持10万以上的并发连接

理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。

(6)热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7*24小时不间断服务的情况下,升级Nginx的可执行文件。当然,也支持不停止服务就更新配置项、更换日志文件等功能。

(7)最自由的BSD许可协议

BSD许可协议不只是允许用户免费使用Nginx,还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。

3、Nginx的安装文件目录

如下图所示:

nginx定义目录 nginx目录结构_HTTP

4、使用Nginx的必备软件

(1)GCC编译器

GCC可用来编译C语言程序,是必备的编译工具。

(2)PCRE库

PCRE(Perl兼容正则表达式)是一个函数库,该库支持正则表达式。

(3)zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里面配置了gzip on,并指定队友某些类型的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译的时候必须把zlib编译进Nginx。

(4)OpenSSL开发库

如果我们的服务器不只是要支持HTTP,还需要在更安全的的SSL协议上传输HTTP,那么就需要拥有OpenSSL。如果我们想要使用MD5、SHA1等散列函数,也需要安装它。

5、安装Nginx及其必备软件

(1)安装GCC

1 下载

在GCC网站上(http://gcc.gnu.org)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 4.2.1。可供下载的文件一般有两种形式:gcc-4.1.2.tar.gz和gcc-4.1.2.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2. 解压缩

拷贝gcc-4.1.2.tar.bz2(我下载的压缩文件)到/usr/local/src(根据自己喜好选择)下,根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar zxvf gcc-4.1.2.tar.gz

或者

% bzcat gcc-4.1.2.tar.bz2 | tar xvf -

新生成的gcc-4.1.2这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫 /usr/local/gcc-4.1.2的目标目录:

% mkdir /usr/local/gcc-4.1.2

% cd gcc-4.1.2

以下的操作主要是在目标目录 ${objdir} 下进行。(否则会出错,后面有解释)

4. 配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

% ${srcdir}/configure --prefix=${destdir} [其它选项]

例如,如果想将GCC 4.1.2安装到/usr/local/gcc-4.1.2目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

% ../gcc-4.1.2/configure --prefix=/usr/local/gcc-4.1.2 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux--with-system-zlib --enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-4.1.2目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

5. 编译

% make

6. 安装

执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 4.1.2安装过程就完成了。

(2)安装OpenSSL

nginx定义目录 nginx目录结构_nginx_02

(3)安装pcre

nginx定义目录 nginx目录结构_nginx定义目录_03

(4)安装zlib

nginx定义目录 nginx目录结构_Nginx_04

(5)安装nginx

nginx定义目录 nginx目录结构_HTTP_05

5、安装中可能出现的问题

(1)安装pcre

错误提示:checking build system type... configure: error: cannot guess build type; you must specify one

解决方案:加一个--build=arm-linux参数,即./configure --build=arm-linux

(2)安装nginx

错误提示:nginx: [emerg] unknown directive "stub_status" in /usr/local/openresty/nginx/conf/conf.d/ngx_metric.conf:19

解决方案:Nginx没有添加modules/ngx_http_stub_status_module.o模块,加上对应的参数,即./configure  --with-http_stub_status_module

6、Nginx的启动

没有手动指定安装Nginx的目录的话,默认是在/usr/local目录下。

进入到/usr/local/nginx/sbin目录,使用命令./nginx启动nginx。然后可以使用ps -ef|grep nginx查询nginx的进程是否启动成功。

7、Nginx的基本操作

启动
[root@localhost ~]# /usr/local/nginx/sbin/nginx
停止/重启
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s stop(quit、reload)
命令帮助
[root@localhost ~]# /usr/local/nginx/sbin/nginx -h
验证配置文件
[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf