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.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 ③ 测试: 也可以通过网页进行测试。 (2)基于端口的虚拟主机 ① 要求: ② 实施: //去掉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 ③ 测试
2、站点安全 (1)实施环境:Centos 64为,PC机 (2)案例要求: 现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。 (3)实施拓扑图: 根据实施的要求使用绘图工具绘制出网络拓扑图,如下图所示:
(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 //通过网页访问,进行安装证书 然后点击安装此证书,然后就完成了。
(5)测试验证 ① 在客户机192.168.2.1上访问该网站,结果如下图: 输入用户名user1和密码123,登陆结果如下: 如果不用user1和user2登陆则显示结果如下:
② 在192.168.2.102机器上访问结果如下: 从上图可以看出只允许192.168.2.1的机器访问,其他机器不允许访问。
|