【深入理解Nginx】研究Nginx能幫我們做什麼

第1章 研究Nginx前能幫我們做什麼

目錄

第1章 研究Nginx前能幫我們做什麼

1.1 Nginx是什麼

1.2 爲什麼選擇Nginx

1.3 準備工作

1.3.1 使用Nginx的必備軟件

1.3.2 磁盤目錄

1.3.3 Linux內核參數的優化

1.3.4 獲取Nginx源碼

1.4 編譯安裝Nginx

1.5 configure詳解

1.6 Nginx的命令行控制


1.1 Nginx是什麼

       Nginx使用基於事件驅動的架構能夠併發處理百萬級別的TCP連接,高度模塊化的涉及和自由的許可證使得Nginx功能的第三方模塊層出不窮,而且優秀帶來了極佳的穩定性,因此作爲Web服務器被廣泛應用到大流量的網站上。

      Nginx是一個跨平臺Web服務器,可以運行在多種操作系統上,並且它還可以使用當前操作系統特有的一些高效API來提高自己的性能。例如,對於高效處理大規模併發連接,它支持Linux上的epoll(處理大併發網絡連接的理器),還支持獨有的sendfile系統調用,這個系統調用可以高效地把硬盤中的數據發送到網絡上(不需要先把硬盤數據複製到用戶態內存上再發送),這極大地減少了內核態與用戶態數據間的複製動作。

1.2 爲什麼選擇Nginx

(1)更快:單次請求和併發請求,響應都更快;

(2)高擴展性:由多個不同功能、不同層次、不同類型且耦合度極低的模塊組成。Nginx的模塊都是嵌入到二進制文件中執行的,這使得第三方模塊一樣具備極其優秀的性能,充分利用Nginx的包併發特性;

(3)高可靠性:核心框架代碼的優秀涉及、模塊設計的簡單性。常用模塊非常穩定,且相對獨立;

(4)低內存消耗:一般情況下,10 000個非活躍的HTTP Keep-Alive連接在Nginx中僅消耗2.5MB的內存,這是Nginx支持高併發的基礎;

(5)單機支持10萬以上的併發連接;

(6)熱備份:master管理進程與worker工作進程的分離設計,使得Nginx能夠提供熱部署功能;

(7)最自由的BSD許可協議:BSD許可協議不只是允許用戶免費使用Nginx,它還允許用戶在自己的項目中直接使用或修改Nginx源碼,然後發佈。

核心:支持高併發請求的同時保持高效的服務

1.3 準備工作

1.3.1 使用Nginx的必備軟件

  • Linux操作系統
  • GCC編譯器、G++編譯器(使用C++來編寫Nginx HTTP模塊)
  • PCRE庫(支持正則表達式,HTTP模塊要靠他解析正則表達式)
  • zlib庫(對HTTP包的內容做gzip格式的壓縮)
  • OpenSSL開發庫(支持更安全的SSL協議上傳輸HTTP,或想使用MD5、SHA1等散列函數)

1.3.2 磁盤目錄

(1)Nginx源代碼存放目錄:從官網下載的Nginx源碼文件;

(2)Nginx編譯階段產生的中間文件存放目錄:configure命令執行後所生成的源文件及目錄,以及make命令執行後生成的目標文件和最終連接成功的二進制文件;

(3)部署目錄:實際Nginx服務運行期間所需要的二進制文件、配置文件;

(4)日誌文件存放目錄

1.3.3 Linux內核參數的優化

    修改Linux內核參數,使得Nginx可以擁有更高的性能。通常根據業務特點進行調整。這裏只針對最通用的、使Nginx支持更多併發請求的TCP網絡參數做簡單說明。

file_max:直接限制最大併發連接數
tcp_tw_reuse:設置爲1,表示允許處於TIME_WAIT狀態的socket重新用於新的TCP連接
tcp_keepalive_time:TCP發送keepalive消息的頻度,設置小一些,可以更快地清理無效的連接
tcp_fin_timeout:socket保持在FIN_WAIT_2狀態的最大時間
tcp_max_tw_buckets:表示操作系統允許TIME_WAIT套接字數量的最大量
tcp_max_syn_backlog:表示TCP三次握手建立階段接收SYN請求隊列的最大長度,默認1024
ip_local_port_range:定義了在UDP和TCP連接中本地端口的取值範圍
net.ipv4.tcp_rmem:定義了TCP接收滑動窗口的最小值、默認值、最大值
net.ipv4.tcp_wmem:定義了TCP發送滑動窗口的最小值、默認值、最大值
netdev_max_backlog:當網卡接收數據包的速度大於內核處理的速度時,會有一個隊列保存這些數據包
rmem_default:表示內核套接字接收緩存區默認的大小
wmem_default:表示內核套接字發送緩存區默認的大小
rmem_max:表示內核套接字接收緩衝區的最大大小
wmem_max:表示內核套接字發送緩衝區的最大大小

1.3.4 獲取Nginx源碼

tar -zxvf nginx-1.0.14.tar.gz

1.4 編譯安裝Nginx

    進入nginx-1.0.14執行:

./configure   //configure命令至關重要,包括檢測操作系統內核和已經安裝的軟件,參數的解析等
make   
make install  //根據configure執行時的參數將Nginx部署到指定的安裝目錄

1.5 configure詳解

1.5.1 configure的命令參數

(1)路徑相關的參數

(2)編譯相關的參數

(3)依賴軟件的相關參數

(4)模塊相關參數:事件模塊、默認即編譯進入Nginx的HTTP模塊、默認不會編譯進入Nginx的HTTP模塊、郵件代理服務器相關的mail模塊、其他模塊。

  總結:在安裝過程中,configure做了大量的幕後工作,除了尋找依賴的軟件外,還針對不同的UNIX操作系統做了許多優化工作。除了生成MakeFile外,還生成了ngx_modules.c文件,它決定了運行時所有模塊的優先級(在編譯過程中),對於不需要的模塊,既不會加入ngx_modules數組,也不會編譯進入Nginx產品中,這也體現了輕量級的概念。

1.6 Nginx的命令行控制

(1)默認方式啓動

直接執行Nginx二進制程序

/usr/local/nginx/sbin/nginx

(2)另行指定配置文件的啓動方式   -c

使用-c參數指定配置文件。

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf

(3)另行指定安裝目錄的啓動方式  -p

使用-p參數指定Nginx的安裝目錄

(4)另行指定全局配置項的啓動方式      -g

可以通過-g參數臨時指定一些全局配置項,以使新的配置項生效

(5)測試配置信息是否有錯誤    -t

在不啓動Nginx的情況下,使用-t參數僅測試配置文件是否有錯誤

(6)在測試配置階段不輸出信息     -q

測試配置選項時,使用-q參數可以不把error級別以下的信息輸出到屏幕

(7)顯示版本信息  -v

使用-v參數顯示Nginx的版本信息

(8)顯示編譯階段的參數   -V

(9)快速停止服務    -s stop

(10)優雅地停止服務   -s quit

(11)使運行中地Nginx重讀配置項並生效   -s reload

(12)日誌文件回滾   -s reopen

(13)顯示命令行幫助  -h或者-?

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