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
//重新读取该文件
[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是否成功,结果如下:
到此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文件,编辑结果如下:
复制第36行到67行,然后在68行粘贴,然后进行编辑,编辑内容如下:
//添加一个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的结果如下图所示:
也可以通过网页进行测试。
⑵ 基于端口的虚拟主机
① 要求:
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
//关闭nginx,然后重新启动
[root@huangzhong tec]# pkill -9 nginx
[root@huangzhong tec]# nginx
③ 测试
通过网页访问进行测试,首先访问 80,访问结果如下:
然后访问 800结果如下:
2、站点安全
(1)实施环境:Centos 64为,PC机
(2)案例要求:
现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。
(3)实施拓扑图:
根据实施的要求使用绘图工具绘制出网络拓扑图,如图4所示:
图4:网络拓扑图
(4)案例实施:
案例的实施大致可以按照以下步骤实施:
① 来源控制
//编辑配置文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
②身份验证:
//编辑配置文件
[root@huangzhong ~]# vim /etc/nginx/nginx.conf
//因为在上面编辑时用到了账号库,因此接下来创建账号库。
//查看账号库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
//创建账号和密码
//查看账号库文件的内容
[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 //显示行号,查看需要配置的内容如下:
从上面的配置文件中可以看到首先在/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
//从私钥中提取产生公钥,操作如下:
编辑完后公钥就产生了导出CA就实现了,接下来就是站点证书以及私钥的产生,操作如下:
//首先创建站点私钥、请求和证书存放目录
[root@huangzhong CA]# mkdir -pv /usr/local/nginx/certs
//产生站点私钥
[root@huangzhong certs]# openssl genrsa 1024 >nginx.key
//生成站点请求文件
//让CA进行颁发证书
[root@huangzhong certs]# openssl ca -in nginx.req -out nginx.cert
//将证书与站点绑定
[root@huangzhong certs]# vim /etc/nginx/nginx.conf
把监听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
//通过网页访问,进行安装证书
然后点击安装此证书,然后就完成了。
⑸ 测试验证
① 在客户机192.168.2.1上访问该网站,结果如下图:
输入用户名user1和密码123,登陆结果如下:
如果不用user1和user2登陆则显示结果如下:
② 在192.168.2.102机器上访问结果如下:
从上图可以看出只允许192.168.2.1的机器访问,其他机器不允许访问。