Project 1:Nginx和Apache的区别
1. apache 相对于nginx 的优点:
- rewrite ,比nginx 的rewrite 强大
- 动态页面,nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
- 模块超多,基本想到的都可以找到
- 少bug ,nginx 的bug 相对较多超稳定
2. nginx相对于apache的优点:
- 轻量级,同样起web 服务,比apache占用更少的内存及资源 ,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 这归功于Nginx为我们选择了 epoll and kqueue 作为开发模型.
- 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
- 高度模块化的设计,编写模块相对简单
- 社区活跃,各种高性能模块出品迅速啊
- Nginx本身就是一个反向代理服务器
- 负载均衡能力突出,Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.
3. 核心区别:apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。
先说Select:
- Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
- 操作限制:通过遍历FD_SETSIZE个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍(这就是apache慢的原因).
再说Epoll:
- Socket数量无限制
- 操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询(这当然是nginx快的原因啦).
原理部分小编觉得读者知道这些就够了,起码当别人问起你选择上述二者之一的理由你已经够应付啦,当然小编还给你推荐一种折中的方案,nginx做前端,apache做后端啦
Project 2:安装nginx
软件需求:
Step 1:安装pcre-devel,以及建立nginx用户
# yum install pcre-devel
# groupadd -r nginx
# useradd -r -g nginx -M nginx
准备工作,nginx的gzip模块需要zlib库,rewrite模块需要pcre库,ssl模块需要openssl库,那么我们来依次安装它们。
zlib库安装:
1)下载:wget http://zlib.net/zlib-1.2.8.tar.gz
2) 解压:tar -zxvf zlib-1.2.8.tar.gz
3) 安装:./configure –prefix=/usr/local/zlib-1.2.8 && make &&make install
pcre库安装:
1)下载:wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
2) 安装:
代码语言:javascript复制./configure
代码语言:javascript复制--prefix=/usr/local/pcre-8.38
代码语言:javascript复制--libdir=/usr/local/lib/pcre
代码语言:javascript复制--includedir=/usr/local/include/pcre
代码语言:javascript复制make
代码语言:javascript复制make install
openssl 库安装:
1)下载:wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
2)安装:
代码语言:javascript复制./configure --prefix=/usr/local/openssl-1.0.1e && make && make install
通过openssl version命令查看是否安装成功。
Step 2:解压缩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
# mkdir -p /var/tmp/nginx/client
Step 3:启动nginx服务并在客户端做测试
# /usr/local/nginx/sbin/nginx &
查询nginx的启动状态
客户机浏览器输入http://ip试试 (ip 可以通过 ifconfig查看)
Nginx启动出错 error while loading shared libraries:
http://www.cnblogs.com/wenanry/archive/2012/04/16/2451881.html
http://www.iitshare.com/error-while-loading-shared-libraries-libpcre-so-1.html
/usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory 从错误看出是缺少lib文件导致,进一步查看下
ln -s /usr/local/lib/libpcre.so.1 /lib
nginx: [emerg] getpwnam("nginx") failed 错误则
配置文件nginx.conf的改为 user nginx;