虽然Apache是整个www服务中中坚力量,可是他也不是万能的,他也有他的不足。那就是他的 “抗压”能力相比之下有些不足,当面临数万的访问量的时候,Apacheserver 能作的只有“吃cpu,耗内存”, 而俄罗斯开发的Nginx也是一款不错的HTTPServer的服务软件。市场的占有率也不容忽视。php
最新数据能够看出,Apache状态不佳,而微软和Nginx略有上升的趋势html
数据来自http://news.netcraft.com linux
做为一个技术人员,特别是互联网方面,给本身注入“新鲜的血液”已是咱们的准则之一。nginx
来讲说 Apache和Nginx的区别吧 ,也便于咱们的学习。web
① 首先Apache是支持并发链接的,运行httpd这个服务后,就会产生不少的子进程/线程来响应不一样的客户端请求。Apache两种工做模式:是prefork模式与worker模式正则表达式
prefork每一个子进程只有一个线程,效率高但消耗内存大,是linux下默认的模式;worker模式每一个子进程有多个线程,内存消耗低,但一个线程崩溃会牵连其它同子进程的线程。apache
② 另外Apache支持静态网页和动态网页,好比他的PHP就是靠本身所支持的模块来实现的mod_php5 又被称为apxs2。windows
③ 所以Apache是基于多进程的这样一个HTTPServer,也正是他这样的特色,注定了Apache在接受大的并发量的时候,无心会占用大量的cpu和内存资源,而这些并非咱们愿意看的。浏览器
而Nginx并非基于进程的HTTPServer,是一种异步服务器,“异步”一词我也没有很深的了解,只知道他能利用极少的硬件资源去响应大量的客户请求,达到以一当百的效果。好比,对于10,000的并发链接请求,nginx可能仅仅使用几M的内存;而Apache可能须要使用几百M的内存资源。bash
nginx和Apache相似都经过各类模块能够对服务器的功能进行丰富的扩展,一样都是经过conf配置文件对各类选项进行配置。可是,Nginx虽好,对于PHP等动态网页,nginx没有内置的模块来对PHP进行支持,而是经过FastCGI来支持的。(以上内容参考教学资料)
下面咱们就来搭建Nginx
安装Nginx和安装Apache的区别并非很大,这里我分为三个步骤
1.获取软件包: 其安装文件能够从官方网站http://www.nginx.org下载,而且Nginx的windows版本有,很方便。
2.安装Nginx所须要的依赖包,以及运行的帐户和组。
3.编译安装,并优化路径
Yum安装所须要的安装包
yum -y install pcre-devel zlib-devel
建立用户和组 不指定宿主目录 不容许登录系统
编译安装
--with-http_stub_start_module: 指定启用http_stub_start_module这个模块来支持状态统计
更多的参数能够用 ./configure --help 查看
make && make install 来编译安装
安装完成后 优化路径
使用nginx -t 命令查看配置文件是否有错误
Nginx安装完毕
使用命令 nginx启动服务 使用kill 或者 killall 关闭服务
使用kill ,nginx 命令管理服务不是很方便,也不服务linux的风格,因此在这我就手动编写nginx的系统服务脚本,而且添加到系统服务中
脚本以下:
———————————————————————————————————————
#!/bin/bash
# chkconfig: - 60 50
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
nginx_path="/usr/local/nginx"
nginx_pid="/usr/local/nginx/nginx.pid"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginx_path/sbin/nginx ] || exit 0
RETVAL=0
prog="nginx"
start() {
# Start daemons.
if [ -e $nginx_pid -a ! -z $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
if [ -e /usr/local/nginx/conf/nginx.conf ];then
echo -n $"Starting $prog: "
$nginx_path/sbin/nginx -c /usr/local/nginx/conf/nginx.conf &
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog"
}
echo
else
RETVAL=1
fi
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $"Stopping $prog: "
killproc -d 10 $nigx_path/sbin/nginx
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
———————————————————————————————————————
这个脚本只能作到部分的功能,没有完善。
给予权限并添加到系统服务
验证脚本
启动后可以访问Nginx的主页面 应注意防火墙的配置
Nginx的主配置文件主要有三部分组成
——全局配置
——I/O事件配置
——HTTP配置
文件中 # 号表示注释内容 ; 表示结束。
1)全局配置
由各类配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工做进程数、错误日志、PID存放位置等基本设置。
经常使用配置项:
user nobody;
//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody
worker_processes 2;
//指定nginx启动的工做进程数量,建议按照cpu数目来指定,通常为它的倍数
worker_cpu_affinity 00000001 00000010;
//为每一个进程分配cpu,上例中将2个进程分配到两个cpu,固然能够写多个,或者将一个
进程分配到多个cpu
worker_rlimit_nofile 102400;
//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit
-n)与nginx进程数相除,可是nginx分配请求并非那么均匀,因此最好与ulimit -n的值
保持一致。(经过”ulimit –n 数值”能够修改打开的最多文件数目)
error_log logs/error.log; //全局错误日志文件的位置
pid logs/nginx.pid; //PID文件的位置
2)I/O事件配置:
使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每一个进程的链接数等设置
events {
use epool; //使用epool模型,对于2.6以上的内核,建议使用epool模型以提升性能
worker_connections 4096; //每一个进程容许的最多链接数(默认为1024),每一个进程的链接数应根据实际须要来定,通常在10000如下,理论上每台nginx服务器的最大链接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。
}
3)HTTP配置
使用”http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、链接保持、以
及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记”servier {}”内。
http { #设定mime类型,即conf/目录下的mime.types文件中的设定。 include mime.types; default_type application/octet-stream; #设定日志格式 log_format main '$remote_addr - $remote_user [$time_local]' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; #设定access log access_log logs/access.log main; sendfile on; //支持文件发送(下载) keepalive_timeout 65; //链接保持超时 #设定虚拟主机 server { //用来配置虚拟主机 listen 80; //WEB服务的监听设置,能够采用”IP地址:端口”形式 server_name www.lnmp.com;//网站名,称能够写多个名称,用空格分隔
location / { //表示如何匹配后面的路径的
index index.html; //默认首页
root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据须要可改成/var/www/html等其余路径。
} charset gb2312; //网页的默认字符集 #设定本虚拟主机的访问日志 access_log logs/www.lnmp.com.access.log main;
error_page 500 502 503 504 /50x.html; //内部错误的反馈页面
location = /50x.html {
root html;
} }}
Nginx的location 配置:
基本语法: location [=|~|~*|^~] /uri/ { … }
= 表示作精确匹配~ :为区分大小写匹配~*: 为不区分大小写匹配!~ :和 !~* 分别为区分大小写不匹配及不区分大小写不匹配
正则表达式匹配,其中:文件及目录匹配,其中:-f 和 !-f 用来判断是否存在文件-d 和 !-d 用来判断是否存在目录-e 和 !-e 用来判断是否存在文件或目录-x 和 !-x 用来判断文件是否可执行
示例1:
location = / {# 只匹配 / 查询。}
location / {
#匹配任何查询,由于全部请求都已 / 开头。可是正则表达式规则和长的块规则将被优先和查询匹配
}
示例2:
location ^~ /images/ {# 匹配任何以 /images/ 开头的任何查询而且中止搜索。任何正则表达式将不会被测试。}
示例3:
location ~* \.(gif|jpg|jpeg)$ {# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。}
Nginx的状态统计:
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问状况。配置
编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块之外,还须要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加以下配置项
注:location /status //匹配任何包含/tongji的任何查询
stub_status on //打开状态统计功能
Access_log off //关闭此位置的日志记录
Nginx 支持为目录添加密码认证,使用apache 的 htpasswd 来建立密码文件
htpasswd -c /.htpass 用户名
保存修改过的nginx.conf文件并重启nginx服务使修生效。
新的配置生效后,在浏览器中访问Nginx服务器的/tongji网站位置(http://web服务器
IP/status)能够看到状态统计信息
验证
active connections — 发起的活动链接数 1个
server accepts handled requests — nginx 总共处理了 4个链接, 成功建立4次握手 (证实中间没有失败的), 总共处理了 6 个请求
Nginx的访问控制:
allow 容许规则,deny拒绝规则;
规则的执行是按从上向下执行,匹配某条规则后将再也不检查其余规则。
拒绝后显示 被禁止
Nginx的虚拟主机配置:
虚拟主机的概念不用过多的解释,Apache部分已经作过介绍。就直接作配置了。
使用Nginx搭建虚拟主机服务器时,每一个虚拟WEB站点拥有独立的”server {}”配置段,各自监听的IP地址、端口号能够单独指定,固然网站名称也是不一样的。
如今我就建立两个虚拟主机 www.51cto.com 和 www.nginx.org
先建立网页文档目录和引导文件
而后修改nginx.conf文件 天骄 server{} 字段 并在其中指定网站名称 监听地址等信息
注意全局配置中的log设置
重启服务 注意dns的配置
最终结果
51
Nginx
其余两种方式 照葫芦画瓢 参考Apache的配置。
End