Nginx详解安装配置以及应用实例

一、Nginx简介

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、 腾讯

Nginx支持高并发连接.官方测试的是5w并发连接但在实际生产中可制成2-4w并发连接数,得益于nginx使用最新的epoll(linux 2.6内核)和kqueue(freebsd)网络I/O模型.而apache使用的则是传统的select模型,其比较稳定的prefork模式为多进程模式,需要经常派生子进程,所消耗的CPU等服务器资源要比nginx高的多.

二、Nginx优点

    (1)Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。 Nginx 的1.2.6稳定版已经于2012年12月11日发布,[1]1.3.10开发版已经于2012年12月25日发布,如果新建站点,建议使用最新稳定版作为生产版本,已有站点升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。

    (2)Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性:在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

    (3)Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。

    (4)Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器:Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

三、Nginx安装配置

     Nginx的官方网站是http://nginx.org/cn/,英文主页为http://nginx.net,从这里可以获得Nginx的最新版本信息。Nginx有三个版本:稳定版、开发版和历史稳定版。开发版更新较快,包含最新的功能和bug的修复,但同时也可能会遇到新的bug,开发版一旦更新稳定下来,就会被加入稳定版分支中。然而有些新功能不一定会被加到旧的稳定版中去。稳定版本更新较慢,但是bug较少,可以作为生产环境的首选,因此通常建议使用稳定版。历史稳定版本为以往稳定版本的汇总,不包含最新的功能。这里选择当前的稳定版本nginx-1.6.0作为介绍对象,开始介绍编译安装,具体步骤如下:

 

    ⑴ 在安装Nginx之前,确保系统已经安装了pcre-devel软件库。因此,先安装该库文件,把光盘挂在上安装。

//挂在光盘

[root@huangzhong ~]# mount /dev/cdrom /media/cdrom

//使用yum进行安装

[root@huangzhong Packages]# yum install pcre-devel-7.8-6.el6.x86_64.rpm 

 

    ⑵ 安装libevent库文件

//解压安装包

[root@huangzhong ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src/

//进入解压后目录下进行编译

[root@huangzhong ~]# cd /usr/local/src/libevent-2.0.21-stable/

[root@huangzhong libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent

//执行make和make install

[root@huangzhong libevent-2.0.21-stable]# make && make install

//编辑/etc/ld.so.conf.d/libevent.conf指明/usr/local/libevent/lib路径

[root@huangzhong lib]# vim /etc/ld.so.conf.d/libevent.conf

//编辑完后重新加载读取

[root@huangzhong lib]# ldconfig

//查看是否生效

[root@huangzhong lib]# ldconfig -pv |grep libevent

 

    ⑶ 安装配置nginx

//解压安装包

[root@huangzhong ~]# tar -zxvf nginx-1.6.0.tar.gz -C /usr/local/src/

//进入解压后的目录进行编译

[root@huangzhong lib]# cd /usr/local/src/nginx-1.6.0/

[root@huangzhong nginx-1.6.0]# ./configure \

> --conf-path=/etc/nginx/nginx.conf \

> --error-log-path=/var/log/nginx/error.log \

> --http-log-path=/var/log/nginx/access.log \

> --pid-path=/var/run/nginx/nginx.pid \

> --lock-path=/var/lock/nginx.lock \

> --user=nginx \

> --group=nginx \

> --with-http_ssl_module \

> --with-http_flv_module \

> --with-http_stub_status_module \

> --with-http_gzip_static_module \

> --http-client-body-temp-path=/var/tmp/nginx/client/ \

> --http-proxy-temp-path=/var/tmp/nginx/proxy/ \

> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

> --with-pcre   //这些参数可以用help帮助,也可以到官网上看样例。

//执行make和make install

[root@huangzhong nginx-1.6.0]# make && make install

//为了能够启动服务因此要把控制脚本放到搜索路径去,因此要编辑/etc/profile文件

[root@huangzhong nginx]# vim /etc/profile

wKiom1Oa9oGzrotOAADqS06xwNU412.jpg 

//重新读取该文件

[root@huangzhong nginx]# . /etc/profile

//测试有没有语法错误

[root@huangzhong ~]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: [emerg] getpwnam("nginx") failed

nginx: configuration file /etc/nginx/nginx.conf test failed

从上面看出现错误,原因是没有创建用户和组

//创建用户和组

[root@huangzhong ~]# groupadd -r nginx

[root@huangzhong ~]# useradd -r -g nginx nginx

//由于编译过程中指明了/var/tmp/nginx/client/目录和/var/tmp/nginx/proxy/目录,因此要创建这两个目录。

[root@huangzhong ~]# mkdir -pv /var/tmp/nginx/client

[root@huangzhong ~]# mkdir -pv /var/tmp/nginx/proxy 

//启动nginx服务,并查看端口

[root@huangzhong ~]# nginx

[root@huangzhong ~]# netstat -tupln |grep nginx

tcp       0      0 0.0.0.0:80         0.0.0.0:*         LISTEN      10868/nginx   //这显示端口号为80表明nginx已经启动

//通过网页进行访问,看nginx是否成功,结果如下:

wKiom1Oa9pCwGCSXAAJBL2zIC1U231.jpg 

到此nginx整个安装配置已经完成。

四、Nginx应用实例

1、地址虚拟主机

(1)基于IP地址的虚拟主机

 实例要求:

192.168.2.100  /usr/local/nginx/html  主站点  

192.168.2.101    /usr/local/nginx/tec 技术部门  tec.tyedus.com

 设施:

由于nginx已经搭建成功,所以直接编辑/etc/nginx/nginx.conf文件,编辑结果如下:

wKioL1Oa9nGSHqncAAJrJcv-8SA669.jpg 

复制第36行到67行,然后在68行粘贴,然后进行编辑,编辑内容如下:

wKioL1Oa9n3wpxCcAAGFQhWHAUA255.jpg 

//添加一个IP地址

[root@huangzhong ~]# ifconfig eth0:0 192.168.2.101

//创建主目录

[root@huangzhong ~]# mkdir /usr/local/nginx/tec

//然后在主目录下创建一个测试网页

[root@huangzhong tec]# echo "tec hello !!! " > index.html

然后打开C盘下windows/system32/Drivers/etc目录下hosts文件,然后把192.168.2.100   www.tyedus.com和192.168.2.101   tec.tyedus.com加入该文件中。

 测试:

在windows下ping  和tec.tyedus.com查看ping的结果如下图所示:

wKioL1Oa9orSL3PfAAMas17tItA798.jpg 

也可以通过网页进行测试。

 

 基于端口的虚拟主机

 要求:

192.168.2.100 /usr/local/nginx/html 主站点    80

192.168.2.100  /usr/local/nginx/tec 技术部门    800

 实施:

//去掉IP地址

[root@huangzhong tec]# ifconfig eth0:0 down

//编辑配置文件

[root@huangzhong tec]# vim /etc/nginx/nginx.conf

wKiom1Oa9saT7HfTAAFljjCXDlM637.jpg 

//关闭nginx,然后重新启动

[root@huangzhong tec]# pkill -9 nginx

[root@huangzhong tec]# nginx

 测试

通过网页访问进行测试,首先访问  80,访问结果如下:

wKiom1Oa9tWSi90_AAH2MZHNUJU270.jpg 

然后访问  800结果如下:

wKiom1Oa9uWwzb5lAADsfc8dPYQ069.jpg 

2、站点安全

(1)实施环境:Centos 64为,PC机

(2)案例要求:

现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。

(3)实施拓扑图:

根据实施的要求使用绘图工具绘制出网络拓扑图,如图4所示:

wKioL1Oa9sjyaJV-AAD9S8ZI8f8705.jpg 

4:网络拓扑图

(4)案例实施:

案例的实施大致可以按照以下步骤实施:

 来源控制

//编辑配置文件

[root@huangzhong ~]# vim /etc/nginx/nginx.conf

wKiom1Oa9wKzYMyaAAG-F_86n7o174.jpg 

 

身份验证:

//编辑配置文件

[root@huangzhong ~]# vim /etc/nginx/nginx.conf

wKioL1Oa9uOg7gJbAAHtbes4cDc026.jpg 

//因为在上面编辑时用到了账号库,因此接下来创建账号库。

//查看账号库htpasswd所在的位置

[root@huangzhong html]# which htpasswd

/usr/bin/htpasswd   //显示出了账号所在的位置

//查看账号库所属的软件包

[root@huangzhong html]# rpm -qf `which htpasswd`

httpd-tools-2.2.15-26.el6.centos.x86_64  //显示出账号库所属的软件包

//所以安装httpd-tools工具

[root@huangzhong ~]# yum install httpd-tools

//创建账号和密码

wKiom1Oa9x-zxpy3AAG0GNe1H_I906.jpg 

//查看账号库文件的内容

[root@huangzhong ~]# cd /usr/local/nginx/          

[root@huangzhong nginx]# cat .htpasswd 

user1:UHtXM2qrLL2Dk

user2:BCsopVrG9Su3E   //已创建的账号和密码

利用非对称加密算法实现加密访问

加密包括非对称加密和对称加密,在上面的加密算法中已提到了两者加密算法的特点,我在这讲的是利用非对称加密算法实现的加密算法,非对称加密算法包括CA的实现和站点证书的生成,具体实现如下操作:

编辑配置文件,操作如下:

//进入配置文件所在的目录下

[root@huangzhong ~]# cd /etc/pki/tls

//查看有没有要找的配置文件

[root@huangzhong tls]# ll

-rw-r--r--. 1 root root 10906 Oct 12  2012 openssl.cnf  //可以看到这个就是我们要找的配置文件

//打开配置文件

[root@huangzhong tls]# vim openssl.cnf

//查看该配置文件内容如下:

打开文件后输入:进入底行模式,在底行模式下输入set nu     //显示行号,查看需要配置的内容如下:

wKioL1Oa9wKDdmD6AAUj6B5McNc548.jpg 

从上面的配置文件中可以看到首先在/etc/pki/CA目录下创建两个文件index.txt和serial,然后再产生私钥和公钥。

//创建index.txt文件

[root@huangzhong CA]# touch index.txt

//创建serial文件,并给予一个初始值

[root@huangzhong CA]# touch serial 

[root@huangzhong CA]# echo "01" >serial 

//先产生私钥

[root@huangzhong CA]# openssl  genrsa  1024  >private/cakey.pem

//查看该私钥文件

[root@huangzhong CA]# ll private/cakey.pem 

-rw-r--r--. 1 root root 891 May 14 21:37 private/cakey.pem

//查看该私钥的内容

[root@huangzhong CA]# cat private/cakey.pem 

//从查看私钥文件可以看出是不安全的,在这里要修改权限

[root@huangzhong CA]# chmod 600 private/cakey.pem

//从私钥中提取产生公钥,操作如下:

wKiom1Oa90CBIkSVAAPxQ2Xh5FU579.jpg 

编辑完后公钥就产生了导出CA就实现了,接下来就是站点证书以及私钥的产生,操作如下:

//首先创建站点私钥、请求和证书存放目录

[root@huangzhong CA]# mkdir -pv /usr/local/nginx/certs

//产生站点私钥

[root@huangzhong certs]# openssl genrsa 1024 >nginx.key

//生成站点请求文件

wKiom1Oa90_hvX1TAAQYKlx5B0A266.jpg 

//让CA进行颁发证书

[root@huangzhong certs]# openssl ca -in nginx.req -out nginx.cert

//将证书与站点绑定

[root@huangzhong certs]# vim /etc/nginx/nginx.conf

wKioL1Oa9zDgTufUAAII-iTSwVM235.jpg 

把监听80端口也关闭。

//关闭nginx服务,然后重新启动

[root@huangzhong ~]# pkill nginx

[root@huangzhong ~]# nginx

//查看端口

[root@huangzhong ~]# netstat -tupln |grep nginx

tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      1821/nginx  

//通过网页访问,进行安装证书

wKioL1Oa9z-Dg382AAQs4TOeJDo274.jpg 

然后点击安装此证书,然后就完成了。

 测试验证

 

 在客户机192.168.2.1上访问该网站,结果如下图:

wKiom1Oa93uRKQRiAAMCltPx5-U507.jpg 

输入用户名user1和密码123,登陆结果如下:

wKioL1Oa92HBnvy_AAINa5PRY4o204.jpg 

如果不用user1和user2登陆则显示结果如下:

wKioL1Oa92-Rbt_2AAFG4j6_7TM722.jpg 

 

 在192.168.2.102机器上访问结果如下:

wKioL1Oa94CguwUQAAFG4j6_7TM117.jpg 

从上图可以看出只允许192.168.2.1的机器访问,其他机器不允许访问。