nginx基礎及編譯安裝

nginx是http服務器和反向代理服務器,又是IMAP/POP3/SMTP 代理服務器

nginx特性:

    基本功能:

        1、能夠實現服務於靜態文件,也就是靜態資源的web服務器,能自動緩存打開的文件描述符;

        2、反向代理服務器,能夠實現簡單的負載均衡和冗餘

        3、能夠支持FastCGI協議

        4、有模塊化話功能,但非DSO(動態裝卸載)機制,支持多種過濾器gzip,SSI和完成圖像大小調整等

        5、支持SSL功能

    擴展功能:

        1、能夠基於名稱和IP做虛擬主機

        2、支持keepalive

        3、支持平滑的配置更新或程序版本升級

        4、支持定製訪問日誌,支持使用日誌緩存以提高性能

        5、支持url rewrite(地址重寫)    

        6、支持路徑別名

        7、支持基於IP及用戶的認證

        8、支持速率限制,併發限制等


nginx的基本架構:

    是由一個master生成一個或多個worker結合工作,一個worker響應多個用戶請求;基於事件驅動工作,有kqueue,epoll,/dev/poll(非事件驅動,是消息通知的有select,poll,rt singals);支持sendfile;支持AIO機制(異步IO);支持mmap


特性總結:nginx有非阻塞、事件驅動,一個master生成多個worker,一個worker響應多個用戶請求的特性;master進程多用於平滑升級。


nginx的模塊類別:

            核心模塊

            標準http模塊

            可選的http模塊

            郵件模塊

            第三方擴展模塊


nginx的使用:

    安裝方法:

        編譯安裝

        rpm安裝:yum(epel源中)


    安裝環境:

       # yum install Development Tools  Server Platform Developmengt
       # yum install pcre-devel


    nginx的配置文件:

            main配置段

             http配置段

                   http  {

                

                    }

        注:在配置參數需要以分號結尾,否則會認爲是語法錯誤;#表示註釋信息;配置語法格式: 參數名  配置值1[值2......]

        配置文件中支持使用變量:有模塊內置變量和用戶自定義變量(ser var_name value)


    nginx基本核心配置的類別:

        用於調試,定位問題;正常運行的必備配置;優化性能的配置;優化性能的配置;事件類的配置


    在nginx運行worker進程是以普通用戶身份運行的,爲nginx用戶和nginx組;


使用示例:

編譯安裝示例:

# get nginx-1.4.7.tar.gz  \\下載程序包
# tar xf nginx-1.4.7.tar.gz   \\解壓程序包
# ./configure \
  
  --prefix=/usr/local/nginx \
  --error-log-path=/data/applogs/nginx/error.log \
  --http-log-path=/data/applogs/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=/usr/local/nginx/client/  
  --http-proxy-temp-path=/usr/local/nginx/proxy/ \ 緩存上流目錄
  --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \
  --http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
  --http-scgi-temp-path=/usr/local/nginx/scgi \
  --with-pcre
# make && make install
# groupadd -r nginx
   \\創建組
# useradd -r -g nginx nginx    \\創建用戶
# mkdir /var/tmp/nginx \\創建剛纔指定模塊的目錄
nginx的啓動路徑:/usr/sbin/nginx
nginx的啓動選項,使用/usr/sbin/nginx -h 查看;
        -t:表示檢查配置文件信息
# vim /etc/rc.d/init.d/nginx  \\添加腳本啓動服務文件
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# 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/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
   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
    make_dirs
    echo -n $"Starting $prog: "
    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
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
# chmod +x /etc/rc.d/init.d/nginx  \\添加執行權限,然後就可以啓動服務了
#  mkdir .vim/syntax -pv     \\ 因爲在配置文件中沒有顯示語法高亮, 這裏設置一下語法高亮,創建一個目錄,用於 存放顯示nginx配置文件語法高亮的程序包
# cd .vim/syntax
#get nginx.vim     \\下載名爲nginx.vim的程序包
#vim filetype.vim     \\創建一個filetype的文件
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == ' ' |        setfiletype nginx | endif   \\在filetype文件中添加此語句
# cd /etc/nginx
# vim nginx.conf     \\進入文件後便可發現語句已經高亮,下面爲配置文件的內容;

正常運行的必備配置:

user nginx;
     \\指定運行worker進程的用戶和組,格式:user username [groupname]
pid /path/to/pidfile_name;     \\指定nginx的pid文件
worker_rlimit_nofile # ;    \\表示指定一個worker進程所能夠打開的最大文件句柄數
worker_rlimit_sigpending #;     \\表示設定每個用戶能夠發往worker進程的信號數量


優化性能相關的配置:

worker_processes #;      \\指定worker進程的個數,建議通常其數值應爲CPU的物理核心數減1;對提高系統性能有很大幫助
worker_cpu_affinity cpumask....;    \\指定cpu掩碼;cpu掩碼是指當系統有幾顆cpu的物理核心就會顯示幾個0,比如:當有四個時則顯示爲0000,當需要調用1顆cpu時則使用0001來表示,當需要調用2顆時,則使用0010表示;當需要調用3顆時,則使用0100表示;對提高系統性能有很大幫助
ssl_engine device;\\指定存在ssl硬件加速器的服務器上,指定所使用的ssl硬件加速設備;
timer_resolution t;     \\每次內核事件調用返回時,都會使用gettimeofday()來更新nginx緩存時鐘;t表示時間值,每隔多長時間返回一次;timer_resolution用於定義每隔多久纔會由gettimeofday()更新一次緩存時鐘;在x86-64系統上,gettimeofday()代價已經很小,可以忽略此配置;但在較老的系統上可按使用情況設定
worker priority nice;    \\優先級,nice值爲-20到19之間的值;對提高系統性能有很大幫助


事件相關的配置:

accept_mutex [on|off];    \\表示是否打開nginx負載均衡鎖;會均衡請求到worker進程上;此鎖能夠讓多個worker進程輪流的、序列化的與新的客戶端建立連接;而通常當一個worker進程的負載達到其上限的7/8時,master就儘可能不再將請求調度到此worker上;默認爲打開狀態
lock_file /path/to/lock_file;    \\指定負載均衡鎖文件;
accept_mutex_delay #ms;    \\使用accept鎖模式中,一個worker進程爲取得accept鎖的等待時長;如果某個worker進程在某次試圖取得鎖時失敗了,至少要等待#ms才能再一次請求鎖;默認爲500毫秒(ms)
multi_accept on|off;    \\是否允許一次性的響應多個用戶請求;默認爲off
use [epoll|rtsig|select|poll];    \\定義使用的事件模型,建議讓nginx自動選擇,默認爲epoll
worker_connections #;    \\每個worker能夠併發響應最大請求數;


用於調試、定位問題:只調試nginx時使用

daemon [on|off];    \\是否讓nginx運行後臺,默認爲on,調試時可以設置off,使得所有信息去接輸出控制檯
master_process on|off;    \\是否以master/worker模式運行nginx,默認爲on,調試時可設置爲off以方便追蹤
error_log /path/to/error_log level;    \\錯誤日誌文件及其級別,默認爲error級別;調試時可以使用debug級別,但要求在編譯時必須使用--with-debug啓用debug功能;


在nginx官網http://nginx.org中有更加詳細的配置文件解釋說明


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章