标签:
nginx
web服务器
反向代理
web
mail
模块化的设计
tengine
varrnish,squid
nginx: cache(disk)
httpd: cache(disk,memory)
nginx基本的HTTP服务器特性:
1.处理静态文件,索引文件以及自动索引;打开文件描述符缓存
2.使用缓存加速反向代理;简单负载均衡以及容错
3.远程FastCGI,uwsgi,SCGI,和memcached服务的缓存加速支持;简单的负载均衡以及容错
4.模块化的架构,过滤器包括gzip压缩、ranges支持、chunked响应、XSLT,SSI以及图像缩放。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理
5.支持SSL,TLS SNI
nginx其他的HTTP服务器特性
1.基于名字和IP的虚拟主机,不支持基于端口的虚拟主机
2.Keep-alive和pipelined连接支持
3.灵活的配置
4.重新加载配置以及在线升级时,不需要终端正在处理的请求;./nginx -s reload
5.自定义访问日志格式,带缓存的日志写操作以及快速日志轮转
6.3xx-5xx错误代码重定向
7.重写(rewrite)模块:使用正则表达式改变URL
8.根据客户端地址执行不同的功能
9.基于客户端IP地址和HTTP基本认证机制的访问控制
10.支持验证HTTP referer
11.支持PUT、DELETE、MKCOL、COPY以及MOVE方法
12.支持FLV流和MP4流
13.速度限制
14.来自同一地址的同时连接数或请求数限制
15.嵌入perl语言
架构和拓展性
1.一个主进程和多个工作进程,工作进程以非特权用户运行
2.支持的事件机制:kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll
3.众多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(临时禁止事件)、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码
4.支持sendfile(FreeBSD 3.1+,Linux 2.2+, Mac OS X 10.5+)、sendfile64(Linux 2.4.21+)和sendfilev (Solaris 87/o1+)
5.文件AIO(FreeBSD 4.3+,Linux 2.6.22+)
6.DIRECTIO(FreeBSD 4.4+,Linux 2.4+,Solaris 2.6+,Mac OS X)
7.支持accept-filters(FreeBSD 4.1+,NetBSD 5.0+)和TCP_DEFER_ACCEPT(Linux 2.4+)
8.10000个非活跃的 HTTP keep-alive 连接仅占用月2.5M内存
9.尽可能避免数据拷贝操作
Nginx 的进程由一个master进程以及多个worker进程组成,如果配置了缓存,则还有缓存加载器进程 (cache loader) 和缓存管理器进程(cache manager) ,主进程由root用户启动,worker等其他进程由非特权用户运行
主进程主要完成以下工作:
1.读取并验证配置信息
2.创建、绑定及关闭套接字
3.启动、终止及维护worker进程的个数
4.无需终止服务而重新配置的工作特性
5.控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本
6.重新打开日志文件
7.编译嵌入式perl脚本
worker进程主要完成的任务:
1.接收、传入并处理来自客户端的连接
2.提供反向代理及过滤功能
3.nginx任何能完成的其他任务
cache loader 进程主要完成的任务
1.检查缓存存储中的缓存对象
2.使用缓存元数据建立内存数据库
cache manager 进程的主要任务
1.缓存失效以及过期检验
nginx 配置有着几个不同的上下文: main、http、server、upstream和location(还有实现邮件服务反向代理的mail)
安装nginx
添加nginx用户
# groupadd -r nginx
# useradd -r -g nginx nginx
编译和安装
# ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --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-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-proxy-temp-path=/var/tmp/nginx/proxy --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
# make && make install
为nginx提供启动脚本
# vim /etc/rc.d/init.d/nginx
#!/bin/bash
#
#chkconfig: 2345 85 15
#description: Nginx is HTTP server
#
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/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
nginx="/usr/sbin/nginx"
prog=`basename $nginx`
nginx_conf_file="/etc/nginx/nginx.conf"
lockfile="/var/lock/subsys/nginx"
nginx_pid="/var/run/nginx/nginx.pid"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
mk_dir() {
user=`$nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
for opt in $options; do
if [ `echo $opt | grep ‘.*-temp-path‘` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
#echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}
start() {
[ -x $nginx ] || exit 5
[ -f $nginx_conf_file ] || exit 6
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
mk_dir
daemon $nginx -c $nginx_conf_file
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
retval=$?
echo
}
configtest() {
$nginx -t -c $nginx_conf_file
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
configtest || return $?
stop
sleep 1
start
;;
reload)
reload
;;
status)
status $prog
retval=$?
;;
configtest)
configtest
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|configtest}"
exit 2
;;
esac
添加为服务,并将启动级别设为2345
# chmod +x /etc/rc.d/init.d/nginx
# chkconfig --add nginx
# chkconfig --level 2345 nginx on
标签:
原文地址:http://www.cnblogs.com/Xhale/p/5174629.html