源碼編譯安裝nginx1.4.7

傳統上基於進程或線程模型架構的web服務經過每進程或每線程處理併發鏈接請求,這勢必會在網絡和I/O操做時產生阻塞,其另外一個必然結果則是對內存或CPU的利用率低下。生成一個新的進程/線程須要事先備好其運行時環境,這包括爲其分配堆內存和棧內存,以及爲其建立新的執行上下文等。這些操做都須要佔用CPU,並且過多的進程/線程還會帶來線程抖動或頻繁的上下文切換,系統性能也會由此進一步降低。

在設計的最初階段,nginx的主要着眼點就是其高性能以及對物理計算資源的高密度利用,所以其採用了不一樣的架構模型。受啓發於多種操做系統設計中基於「事件」的高級處理機制,nginx採用了模塊化、事件驅動、異步、單線程及非阻塞的架構,並大量採用了多路複用及事件通知機制。在nginx中,鏈接請求由爲數很少的幾個僅包含一個線程的進程worker以高效的迴環(run-loop)機制進行處理,而每一個worker能夠並行處理數千個的併發鏈接及請求。

若是負載以CPU密集型應用爲主,如SSL或壓縮應用,則worker數應與CPU數相同;若是負載以IO密集型爲主,如響應大量內容給客戶端,則worker數應該爲CPU個數的1.5或2倍。

Nginx會按需同時運行多個進程:一個主進程(master)和幾個工做進程(worker),配置了緩存時還會有緩存加載器進程(cache loader)和緩存管理器進程(cache manager)等。全部進程均是僅含有一個線程,並主要經過「共享內存」的機制實現進程間通訊。主進程以root用戶身份運行,而worker、cache loader和cache manager均應以非特權用戶身份運行。

主進程主要完成以下工做:
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)。配置語法的格式和定義方式遵循所謂的C風格,所以支持嵌套,還有着邏輯清晰並易於建立、閱讀和維護等優點。

Nginx的代碼是由一個核心和一系列的模塊組成, 核心主要用於提供Web Server的基本功能,以及Web和Mail反向代理的功能;還用於啓用網絡協議,建立必要的運行時環境以及確保不一樣的模塊之間平滑地進行交互。不過,大多跟協議相關的功能和某應用特有的功能都是由nginx的模塊實現的。這些功能模塊大體能夠分爲事件模塊、階段性處理器、輸出過濾器、變量處理器、協議、upstream和負載均衡幾個類別,這些共同組成了nginx的http功能。事件模塊主要用於提供OS獨立的(不一樣操做系統的事件機制有所不一樣)事件通知機制如kqueue或epoll等。協議模塊則負責實現nginx經過http、tls/ssl、smtp、pop3以及imap與對應的客戶端創建會話。


在nginx內部,進程間的通訊是經過模塊的pipeline或chain實現的;換句話說,每個功能或操做都由一個模塊來實現。例如,壓縮、經過FastCGI或uwsgi協議與upstream服務器通訊,以及與memcached創建會話等。
php

1、安裝Nginx:



一、解決依賴關係


# yum groupinstall -y "Development Tools" "Server Platform Development"
# yum install -y openssl-devel pcre-devel


二、安裝


首先添加用戶nginx,實現以之運行nginx服務進程:
# groupadd -r nginx
# useradd -r -g nginx nginx

# tar xf nginx-1.4.7.tar.gz 
# cd nginx-1.4.7


接着開始編譯和安裝:
# ./configure \
  --prefix=/usr \
  --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-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre

# make && make install


說明:
一、Nginx可使用Tmalloc(快速、多線程的malloc庫及優秀性能分析工具)來加速內存分配,使用此功能須要事先安裝gperftools,然後在編譯nginx添加--with-google_perftools_module選項便可。
二、若是想使用nginx的perl模塊,能夠經過爲configure腳本添加--with-http_perl_module選項來實現,但目前此模塊仍處於實驗性使用階段,可能會在運行中出現意外,所以,其實現方式這裏再也不介紹。若是想使用基於nginx的cgi功能,也能夠基於FCGI來實現,具體實現方法請參照網上的文檔。

三、爲nginx提供SysV init腳本:



新建文件/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/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/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


添加至服務管理列表,並讓其開機自動啓動:
# chkconfig --add nginx
# chkconfig nginx on


加入環境變量:nginx

# vim /etc/profile.d/nginx.shweb

export PATH=/usr/local/nginx/sbin/:$PATH數據庫


然後就能夠啓動服務並測試了:

# service nginx startvim

加入語法高亮:

建立存放語法的目錄,將nginx.vim存放到~/.vim/syntax(如/root/.vim/syntax)目錄
沒有目錄則建立
# mkdir .vim/syntax -p
下載地址
http://www.vim.org/scripts/script.php?script_id=1886


退回到上一級目錄/root/.vim/
建立filetype.vim 
vim filetype.vim 
加入以下內容:
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == '' | setfiletype nginx | endif
如安裝的配置文件存放在在/etc/nginx/nginx.conf下
則改成 au BufRead,BufNewFile /etc/nginx/nginx.conf set ft=nginx
緩存

相關文章
相關標籤/搜索