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
nginx