nginx_1_基礎以及安裝

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

相關文章
相關標籤/搜索