2014-04-03 17:52:01
Nginx是一款轻量级的Web服务器(反向代理服务器)及电子邮件代理服务器。由俄罗斯所开发,供其大型的入口网站及搜索引擎Rambler使用。其特点是内存占用很少,并发能力很强.Nginx的出现不是很早,但它的发展速度却是惊人的,嫣然已经成为世界门户网站考虑的对象。中国大陆我们比较熟悉的有:新浪、网易、腾讯、小米、淘宝等等。下面是Nginx的世界占有率排名:
下面我们通过一些小的测试来简单了解一下Nginx的强大。
【准备工作】
①Nginx的官网下载最新的源码:nginx-1.3.16.tar.gz
②Libeventd官网下载最新源码:libevent-2.0.18-stable.tar.gz
说明:nginx采用Epoll【事件通知】机制,需要libevent库的支持,在Red Hat的光盘上是有的,不过版本很低。
③Pcre:一个Perl库,包括perl兼容的正规表达式库,也是需要的。
在Red Hat的光盘上是有的,而且默认已经装过了,但还需要它的一个devel包pcre-devel-6.6-2.e15_1.7(不装编译会出错的).
④Apache:安装Red Hat光盘自带(为了用它带的压力测试工具ab)
一:源码安装Nginx
①创建Nginx服务的nologin系统账号
groupadd -r nginx
useradd -r -g nginx -M nginx
② 解压缩源码.
tar zxvf nginx-1.3.16.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-1.3.16
③源码安装.
./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
make && make install
二:Nginx&Apache的压力测试比较分析
拷贝nginx的主页文件到apache的主目录下(用于压力测试公平性)
cp /usr/local/nginx/html/index.html /var/www/html
启动Apache服务,进行压力测试.
service httpd start
停掉Apache服务,启动Nginx进行压力测试.
注意:启动Nginx前要先建一个client访问时的临时目录.
mkdir -pv /var/tmp/nginx/client/
启动nginx服务.
/usr/local/nginx/sbin/nginx
测试结果显而易见了。。。。。。。。
三:Nginx的一些基础应用
【基于ip地址的虚拟主机】(vim /etc/nginx/nginx.conf)
添加两块网卡:eth0 192.168.145.100
eth0:0 192.168.145.101
server {
listen 192.168.145.100:80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.145.101:80;
server_name localhost;
location / {
root /tec;
index index.html index.htm;
}
error_log /var/log/nginx/tec_error.log;
access_log /var/log/nginx/tec_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
【基于主机头的虚拟主机】(vim /etc/nginx/nginx.conf)
server {
listen 192.168.145.100:80;
server_name www.wpp.com;
location / {
root html;
index index.html index.htm;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 192.168.145.100:80;
server_name tec.server110.com;
location / {
root /tec;(这个目录要自己建立,目录下放置主页html文件)
index index.html index.htm;
}
error_log /var/log/nginx/tec_error.log;
access_log /var/log/nginx/tec_access.log;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
【加密访问】
Step1:建立证书颁发机构CA
①vim /etc/pki/tls/openssl.cnf
②创建CA需要的需要的3个目录(certs、newcerts、crl)和2个文件(index.txt、serial)
cd /etc/pki/CA/
mkdir certs newcerts crl
touch index.txt serial
echo 01 >serial(给serial一个初始序号)
③生成CA自己的私钥文件,并修改权限,放到自己的私钥存放目录(private/)
④CA给自己颁发证书.(生成证书文件cacert.pem)
Step2:建立Nginx的安全目录,并生成相关的私钥和证书文件.
①mkdir -pv /usr/local/nginx/certs
cd /usr/local/nginx/certs
②生成私钥文件(nginx.key),并修改权限.
chmod 600 nginx.key
③提取刚才生成的私钥文件,生成请求证书文件(nginx.csr).
④将请求证书文件提交给证书颁发机构CA,生成证书文件(nginx.crt).
Step3:编辑配置文件,将我们的站点(www.server110.com)配置加密访问.
vim /etc/nginx/nginx.conf(修改完配置文件记得重启服务)
Step4:加密访问测试.(为了方便测试:修改主机的Hosts文件)
Hosts路径(C:WindowsSystem32driversetcHOSTS)
在浏览器的地址栏内输入 (https://www.server110.com),测试.
会提示找不到证书的颁发机构CA,那么我们该感到奇怪了,我们明明建立了CA了啊,而且也有了CA颁发的证书了啊,那为什么会没有呢?
怎么解决这个问题呢?
在Apache上把SSL被做成了它的一种模块,用于调用,而且有证书链的感念,所以可以通过证书链找到证书颁发机构。但是这些在Nginx上没有,但还是有解决办法的,下面就是一种好的解决方法:
既然没有找到CA的链,那我们自己创建一个他们的链不就行了!
cd /usr/loacl/nginx/certs/
cp /etc/pki/CA/cacert.pem ./
cat cacert.pem >>nginx.crt(将CA的私钥文件内容从定向到nginx的后面)
清空浏览器的缓存信息,
在浏览器的地址栏内输入 (https://www.server110.com),再次测试.
会提示当前证书是由不信任的CA所颁发的,但是也能强制访问的.
下面来解决一下不信任的问题:
在浏览器的证书管理里面已经可以查询到我们的CA信息了.
清空一下浏览器缓存信息,再次测试,这一次就可以正常访问了。。。。。。。
是不是很好玩呢?有兴趣的朋友也可以自己试一试哦!!!