1. 程式人生 > >Nginx介紹

Nginx介紹

加速器 組成 這也 file 事件驅動 direct module put css

Nginx介紹

nginx

    nginx是個輕量級、高性能的web服務。
    nginx是一個免費的,開源的,高性能的http和反響代理服務,郵件代理服務和通用的tcp/udp代理服務。
    nginx 是HTTP, SMTP, POP3和IMAP 協議的web服務和反代服務,帶有高並發、高性能和低內存利用的特性。

nginx的功能

    靜態資源的web服務器
    反向代理服務器,實現負載均衡,是為七層代理服務器
    http協議反向代理服務器
    pop3/imap4 協議反向代理服務器
    FastCGI(lnmp),uWSGI(python) 等協議
    模塊化(非DSO ),如zip,SSL

nginx與web 服務相關的功能

    虛擬主機(server) 
    支持 keep-alive 和管道連接
    訪問日誌(支持基於日誌緩沖提高其性能)
    url rewirte
    路徑別名
    基於IP及用戶的訪問控制
    支持速率限制及並發數限制
    重新配置和在線升級而無須中斷客戶的工作進程
    Memcached的GET接口

nginx的特性

    模塊化設計
        nginx采用高度模塊化設計,使得具有較好的擴展性,Nginx的模塊分為核心模塊、郵件模塊和第三方模塊。
    高可靠性
        高可靠性是指服務可靠性。
        Nginx采用一個主進程(master)和N個工作進程(worker)的工作模式,而worker進程才是真正復制相應用戶請求的進程。
        配置了緩存時還會有緩存加載器進程(cache loader)和緩存管理器進程(cache manager)等。
        所有進程均是僅含有一個線程,並主要通過“共享內存”的機制實現進程間通信。
    支持熱部署
        Nginx使用主進程和工作進程的機制,使得Nginx支持熱部署,這個熱部署包括不停止服務更新配置文件、更新日誌文件、以及更新服務器程序版本,也稱為平滑升級。 
    低內存消耗
        Nginx對於內存的消耗是非常小的,特別是對於非活動連接。
        Nginx對於非活動連接是指,當我們開啟持久連接功能時,用戶連接不再發送數據後就會立即轉為非活動連接,直到持久連接超時時間到達才銷毀。
    高擴展性
        Nginx 的設計具有擴展性,它完全是由多個不同功能、不同層次、不同類型且耦合度極低的模塊組成。
        因此,當對某一個模塊修復 Bug 或進行升級時,可以專註於模塊自身,無須在意其他。
    Nginx支持磁盤異步I/O(AIO)、內存映射機制(MMAP)、事件驅動機制(Event-driven)、單線程N請求等等。
    所以支持高並發請求解決C10K(並發連接10000)問題,而這些都是其他服務器無法支持的,

nginx程序架構

技術分享圖片

    主要是master進程和worker進程
    master/worker結構
        一個master進程:
            負責加載和分析配置文件
            管理worker進程
            平滑升級
        一個或多個worker進程
            處理並響應用戶請求
        緩存相關的進程:
            cache loader:載入緩存對象
            cache manager:管理緩存對象

nginx 模塊

    nginx 高度模塊化,但其模塊早期不支持DSO機制,1.9.11版本支持動態裝載和卸載。
    模塊分類:
        核心模塊:
            core module
        標準模塊:
            HTTP模塊:ngx_http_*
                HTTP Core modules 默認功能
                HTTP Optional modules  需編譯時指定
        Mail模塊:
            ngx_mail_*
        Stream模塊:
            ngx_stream_*
        第三方模塊

nginx的功用

    靜態的web資源服務器
        html,圖片,js,css,txt等靜態資源
    結合FastCGI/uWSGI/SCGI 等協議反向代理動態資源請求
    http/https 協議的反向代理
    imap4/pop3 協議的反向代理
    tcp/udp 協議的請求轉發(反向代理)

nginx的安裝

    官方:
        http://nginx.org/packages/centos/7/x86_64/RPMS
    Fedora-EPEL:
        https://mirrors.aliyun.com/epel/7/x86_64/
    編譯安裝:
        yum install pcre-devel openssl-devel zlib-devel
        useradd -r nginx
        ./configure --prefix=/usr/local/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.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio
        make && make install
        編譯安裝nginx 選項:
            --prefix=/etc/nginx     安裝路徑
            --sbin-path=/usr/sbin/nginx     指明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.pid   指明pid 文件安裝位置
            --lock-path=/var/run/nginx.lock     鎖文件安裝位置
            --http-client-body-temp-path=/var/cache/nginx/client_temp   客戶端body 部分的臨時文件存放路徑,如果服務器允許客戶端使用put 方法提交大數據時,臨時存放的磁盤路徑
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp  作為代理服務器,服務器響應報文的臨時文件存放路徑
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp      作為fastcgi 代理服務器,服務器響應報文的臨時文件存放路徑
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp作為uwsgi   代理服務器,服務器響應報文的臨時文件存放路徑
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp    作為scgi 反代服務器,服務器響應報文的臨時文件存放路徑
            --user=nginx  指明以那個身份運行worker   進程,主控master進程一般由root 運行
            --group=nginx   
            --with-http_ssl_module      表示把指定模塊編譯進來

nginx目錄和命令

    rpm -ql nginx(7
        /etc/logrotate.d/nginx
        /etc/nginx/
        /usr/bin/nginx-upgrade
        /usr/lib/systemd/system/nginx.service
        /usr/lib64/nginx/modules
        /usr/sbin/nginx
        /usr/share/doc/nginx-1.10.2
        /usr/share/licenses/nginx-1.10.2
        /usr/share/nginx/html/
        /usr/share/vim/vimfiles/ftdetect/nginx.vim
        /usr/share/vim/vimfiles/indent/nginx.vim
        /usr/share/vim/vimfiles/syntax/nginx.vim
        /var/lib/nginx
        /var/log/nginx
        /etc/rc.d/init.d/nginx(6)
        /etc/sysconfig/nginx(6)
        
    命令:nginx
        nginx — HTTP and reverse proxy server, mail proxy server
        nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
            nginx   默認我啟動nginx,且不能與service和systemctl進行混用。
            -?,-h           幫助
            -v              顯示版本
            -V              顯示版本和配置選項然後退出
            -t              檢查nginx 語法錯誤
            -T              測試配置並顯示退出
            -q              在測試期間禁止顯示非錯誤消息
            -s signal       發送信號給master進程,signal可為:stop, quit,reopen, reload
            -p prefix       設置前綴路徑(default: /usr/share/nginx/)
            -c filename     指定配置文件(default: /etc/nginx/nginx.conf)
            -g directives   從配置文件中設置全局指令

    
    命令:nginx-upgrade
        nginx-upgrade - tool to upgrade nginx without any downtime
        用法:nginx-upgrade

nginx優缺點

    nginx的優點
        1、工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點可利用的場合就遠多於LVS了。
        2、Nginx對網絡穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一,相反LVS對網絡穩定性依賴比較大。
        3、Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。
        3、可以承擔高負載壓力且穩定,在硬件不差的情況下一般能支撐幾萬次的並發量,負載度比LVS相對小些。
        4、Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,並且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測。比如用戶正在上傳一個文件,而處理該上傳的節點剛好在上傳過程中出現故障,Nginx會把上傳切到另一臺服務器重新處理,而LVS就直接斷掉了,如果是上傳一個很大的文件或者很重要的文件的話,用戶可能會因此而不滿。
        5、Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP也是近幾年非常流行的web架構,在高流量的環境中穩定性也很好。
        6、Nginx現在作為Web反向加速緩存越來越成熟了,速度比傳統的Squid服務器更快,可以考慮用其作為反向代理加速器。
        7、Nginx可作為中層反向代理使用,這一層面Nginx基本上無對手,唯一可以對比Nginx的就只有lighttpd了,不過lighttpd目前還沒有做到Nginx完全的功能,配置也不那麽清晰易讀,社區資料也遠遠沒Nginx活躍。
        8、Nginx也可作為靜態網頁和圖片服務器,這方面的性能也無對手。還有Nginx社區非常活躍,第三方模塊也很多。
        9、抗並發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高並發下nginx 能保持低資源低消耗高性能
    
    Nginx的缺點是:
        1、Nginx僅能支持http、https和Email協議,這樣就在適用範圍上面小些,這個是它的缺點。
        2、對後端服務器的健康檢查,只支持通過端口來檢測,不支持通過url來檢測,不支持Session的直接保持,但能通過ip_hash來解決。

Nginx介紹