nginx的自我介紹以及如何編譯安裝

Nginx的介紹:                                               

  Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,在中國使用nginx網站用戶有:新浪、網易、騰訊等。

以上我們瞭解了nginx的由來,那麼接下來我們研究研究nginx的基本架構、基本功能、擴展能能,nginx的特性以及模塊的類型:

Nginx的基本架構:
    一個master進程,生成一個或多個worker
    事件驅動: epoll, kqueue, /dev/poll (event ports)
        消息通知:select, poll, rt signals
    支持sendfile, sendfile64
    支持AIO
    支持mmap

        
由此我們可以得出結論;nginx: 非阻塞、事件驅動、一個master生成一個或多個worker, 每個worker響應n個請求;

基本功能:
    靜態資源的web服務器,能緩存打開的文件 描述符
    http, smtp, pop3協議的反向代理服務器,緩存、負載均衡;
    支持FastCGI (fpm)
    模塊化,非DSO機制,過濾器zip,SSI及圖像大小調整;
    支持SSL

擴展功能:
    基於名稱和IP的虛擬主機;
    支持keepalive
    支持平滑升級
    定製訪問日誌 ,支持使用日誌緩衝區提高日誌存儲性能
    支持url rewrite
    支持路徑別名
    支持基於IP及用戶的訪問控制
    支持速率限制,支持併發數限制

Nginx的特性:
    模塊化設計、較好擴展性
    高可靠性; master-->worker
    低內存消耗; 10000個keep-alive連接在Nginx僅消耗2.5MB
    支持熱部署;不停機而更新配置文件、更換日誌文件、更新服務器程序版本

模塊類型:
    核心模塊
    Standard HTTP modules
    Optional HTTP modules
    Mail modules                      
    3rd party modules

nginx的安裝方式:                                                      

安裝Nginx可以採用YUM方法,Nginx官方提供的源可以保證安裝最新版本的穩定程序;但是在生產環境中,我們可以根據自己的需求,通過編譯源碼的方式安裝。

下面以編譯安裝nginx-1.6.2.tar.gz進行說明:

1、解決依賴關係:
# yum groupinstall "Development Tools" "Server Platform Deveopment" -y 
# yum install openssl-devel pcre-devel -y
2、添加用戶nginx,實現以之運行nginx服務進程:
# groupadd -r nginx
# useradd -r -g nginx nginx
3、創建編譯安裝存放的位置文件:
#mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi}
4、編譯、安裝:
#./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --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 --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_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/fastcgi

# make && make install
5、檢查語法:#/usr/local/nginx/sbin/nginx -t
   啓動nginx服務:#/usr/local/nginx/sbin/nginx
   查看80端口是否處於監聽狀態:#ss -tnl
   打開瀏覽器輸入當前主機的地址會出現nginx的默認頁面

說明:
1、Nginx可以使用Tmalloc(快速、多線程的malloc庫及優秀性能分析工具)來加速內存分配,使用此功能需要事先安裝gperftools,而後在編譯nginx添加--with-google_perftools_module選項即可。
2、如果想使用nginx的perl模塊,可以通過爲configure腳本添加--with-http_perl_module選項來實現,但目前此模塊仍處於實驗性使用階段,可能會在運行中出現意外,因此,其實現方式這裏不再介紹。如果想使用基於nginx的cgi功能,也可以基於FCGI來實現,具體實現方法請參照網上的文檔。
3、爲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/local/nginx/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

附:./configure編譯使用的選項說明:                                     

1、--prefix=<path> - Nginx安裝路徑。如果沒有指定,默認爲 /usr/local/nginx;

2、--conf-path=<path> - 在沒有給定-c選項下默認的nginx.conf的路徑。如果沒有指定,默認爲<prefix>/conf/nginx.conf;

3、--user=<user> - 在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的用戶。如果沒有指定,默認爲 nobody;

4、--group=<group> - 在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的組。如果沒有指定,默認爲 nobody;

5、--error-log-path=<path> - 在nginx.conf中沒有指定error_log指令的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲 <prefix>/logs/error.log;

6、--http-log-path=<path> - 在nginx.conf中沒有指定access_log指令的情況下,默認的訪問日誌的路徑。如果沒有指定,默認爲 <prefix>/logs/access.log;

7、--pid-path=<path> - 在nginx.conf中沒有指定pid指令的情況下,默認的nginx.pid的路徑。如果沒有指定,默認爲 <prefix>/logs/nginx.pid;

8、--lock-path=<path> - nginx.lock文件的路徑;

9、--with-http_ssl_module -支持SSL

10、--with-http_stub_status_module - 啓用 "server status" 頁

11、--with-http_gzip_static_module -啓動預壓縮功能

12、--with-http_flv_module - 啓用ngx_http_flv_module 

13、--with-http_mp4_module -開啓nginx對flv視頻流的支持

14、--http-client-body-temp-path=/var/tmp/nginx/client-設置路徑的HTTP客戶端請求體的臨時文件

15、--http-proxy-temp-path=/var/tmp/nginx/proxy-設置HTTP代理的臨時文件的路徑

16、--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi-設置臨時文件的HTTP請求




以上只是個人對nginx的小總結,不足之處,望各位兄弟姐妹指出,感激不盡下篇將是對nginx的配置文件進行詳細解析




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