Nginx介紹 nginx nginx的功能 nginx與web 服務相關的功能 nginx的特性 nginx程式架構 nginx 模塊 nginx的功用 nginx的安裝 nginx目錄和命令 nginx優缺點 ...
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的安裝
官方:
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來解決。