1. 程式人生 > >nginx教程第一篇:nginx安裝、配置

nginx教程第一篇:nginx安裝、配置

一、簡介

為什麼選擇Nginx?

  • 更快 這表現在兩個方面: 一方面, 在正常情況下, 單次請求會得到更快的響應; 另一方面, 在高峰期( 如有數以萬計的併發請求) , Nginx可以比其他Web伺服器更快地響應請求
  • 高擴充套件性 Nginx的設計極具擴充套件性, 它完全是由多個不同功能、 不同層次、 不同型別且耦合度極 低的模組組成。 因此, 當對某一個模組修復Bug或進行升級時, 可以專注於模組自身, 無須 在意其他。 而且在HTTP模組中, 還設計了HTTP過濾器模組: 一個正常的HTTP模組在處理 完請求後, 會有一串HTTP過濾器模組對請求的結果進行再處理。 這樣, 當我們開發一個新 的HTTP模組時, 不但可以使用諸如HTTP核心模組、 events模組、 log模組等不同層次或者不 同類型的模組, 還可以原封不動地複用大量已有的HTTP過濾器模組。 這種低耦合度的優秀 設計, 造就了Nginx龐大的第三方模組, 當然, 公開的第三方模組也如官方釋出的模組一樣 容易使用。 Nginx的模組都是嵌入到二進位制檔案中執行的, 無論官方釋出的模組還是第三方模組都 是如此。 這使得第三方模組一樣具備極其優秀的效能, 充分利用Nginx的高併發特性, 因 此, 許多高流量的網站都傾向於開發符合自己業務特性的定製模組
  • 高可靠性 高可靠性是我們選擇Nginx的最基本條件, 因為Nginx的可靠性是大家有目共睹的, 很多 家高流量網站都在核心伺服器上大規模使用Nginx。 Nginx的高可靠性來自於其核心框架程式碼 的優秀設計、 模組設計的簡單性; 另外, 官方提供的常用模組都非常穩定, 每個worker程序 相對獨立, master程序在1個worker程序出錯時可以快速“拉起”新的worker子程序提供服務。
  • 低記憶體消耗 一般情況下, 10000個非活躍的HTTP Keep-Alive連線在Nginx中僅消耗2.5MB的記憶體, 這 是Nginx支援高併發連線的基礎。
  • 單機支援10萬以上的併發連線 這是一個非常重要的特性! 隨著網際網路的迅猛發展和網際網路使用者數量的成倍增長, 各大 公司、 網站都需要應付海量併發請求, 一個能夠在峰值期頂住10萬以上併發請求的Server, 無疑會得到大家的青睞。 理論上, Nginx支援的併發連線上限取決於記憶體, 10萬遠未封頂
  • 熱部署 master管理程序與worker工作程序的分離設計, 使得Nginx能夠提供熱部署功能, 即可以 在7×24小時不間斷服務的前提下, 升級Nginx的可執行檔案。 當然, 它也支援不停止服務就 更新配置項、 更換日誌檔案等功能
  • 最自由的BSD許可協議 這是Nginx可以快速發展的強大動力。 BSD許可協議不只是允許使用者免費使用Nginx, 它 還允許使用者在自己的專案中直接使用或修改Nginx原始碼, 然後釋出。 這吸引了無數開發者繼 續為Nginx貢獻自己的智慧

二、安裝前準備

1.環境需要庫
  1. 安裝GCC編譯器:yum install -y gcc
  2. 安裝G plus plus編譯器:yum install -y g++
  3. 安裝PCRE庫(用來解析正則表示式):yum install -y pcre pcre-devel
  4. 安裝zlib庫:yum install -y zlib zlib-devel
  5. 安裝openssl庫:yum install -y openssl openssl-devel
2.Linux核心引數優化

由於預設的Linux核心引數考慮的是最通用的場景, 這明顯不符合用於支援高併發訪問 的Web伺服器的定義, 所以需要修改Linux核心引數, 使得Nginx可以擁有更高的效能。 在優化核心時, 可以做的事情很多, 不過, 我們通常會根據業務特點來進行調整, 當 Nginx作為靜態Web內容伺服器、 反向代理伺服器或是提供圖片縮圖功能(實時壓縮圖片) 的伺服器時, 其核心引數的調整都是不同的。 這裡只針對最通用的、 使Nginx支援更多併發 請求的TCP網路引數做簡單說明。 首先, 需要修改/etc/sysctl.conf來更改核心引數。 例如, 最常用的配置:

fs.file-max = 999999
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog=1024

然後執行sysctl-p命令, 使上述修改生效

引數說明:

·file-max: 這個引數表示程序( 比如一個worker程序) 可以同時開啟的最大控制代碼數, 這
個引數直接限制最大併發連線數, 需根據實際情況配置。
·tcp_tw_reuse: 這個引數設定為1, 表示允許將TIME-WAIT狀態的socket重新用於新的
TCP連線, 這對於伺服器來說很有意義, 因為伺服器上總會有大量TIME-WAIT狀態的連線。
·tcp_keepalive_time: 這個引數表示當keepalive啟用時, TCP傳送keepalive訊息的頻度。
預設是2小時, 若將其設定得小一些, 可以更快地清理無效的連線。
·tcp_fin_timeout: 這個引數表示當伺服器主動關閉連線時, socket保持在FIN-WAIT-2狀
態的最大時間。
·tcp_max_tw_buckets: 這個引數表示作業系統允許TIME_WAIT套接字數量的最大值,
如果超過這個數字, TIME_WAIT套接字將立刻被清除並列印警告資訊。 該引數預設為
180000, 過多的TIME_WAIT套接字會使Web伺服器變慢。
·tcp_max_syn_backlog: 這個引數表示TCP三次握手建立階段接收SYN請求佇列的最大
長度, 預設為1024, 將其設定得大一些可以使出現Nginx繁忙來不及accept新連線的情況時,
Linux不至於丟失客戶端發起的連線請求。
·ip_local_port_range: 這個引數定義了在UDP和TCP連線中本地( 不包括連線的遠端)
埠的取值範圍。
·net.ipv4.tcp_rmem: 這個引數定義了TCP接收快取( 用於TCP接收滑動視窗) 的最小
值、 預設值、 最大值。
·net.ipv4.tcp_wmem: 這個引數定義了TCP傳送快取( 用於TCP傳送滑動視窗) 的最小
值、 預設值、 最大值。
·netdev_max_backlog: 當網絡卡接收資料包的速度大於核心處理的速度時, 會有一個佇列
儲存這些資料包。 這個引數表示該佇列的最大值。
·rmem_default: 這個引數表示核心套接字接收快取區預設的大小。
·wmem_default: 這個引數表示核心套接字傳送快取區預設的大小。
·rmem_max: 這個引數表示核心套接字接收快取區的最大大小。
·wmem_max: 這個引數表示核心套接字傳送快取區的最大大小。
注意 滑動視窗的大小與套接字快取區會在一定程度上影響併發連線的數目。 每個
TCP連線都會為維護TCP滑動視窗而消耗記憶體, 這個視窗會根據伺服器的處理速度收縮或擴
張。
引數wmem_max的設定, 需要平衡實體記憶體的總大小、 Nginx併發處理的最大連線數量
( 由nginx.conf中的worker_processes和worker_connections引數決定) 而確定。 當然, 如果僅僅
為了提高併發量使伺服器不出現Out Of Memory問題而去降低滑動視窗大小, 那麼並不合
適, 因為滑動視窗過小會影響大資料量的傳輸速度。 rmem_default、 wmem_default、
rmem_max、 wmem_max這4個引數的設定需要根據我們的業務特性以及實際的硬體成本來綜
合考慮。
·tcp_syncookies: 該引數與效能無關, 用於解決TCP的SYN攻擊

三、下載:

下載連結

四、編譯安裝Nginx

  1. 解壓:tar -zxvf nginx-1.13.8.tar.gz
  2. 安裝:
 ./configure (可通過 ./configure --help,然後指定引數生成配置)
 make
 make install  

命令說明:

1.configure命令做了大量的“幕後”工作, 包括檢測作業系統核心和已經安裝的軟體, 引數
的解析, 中間目錄的生成以及根據各種引數生成一些C原始碼檔案、 Makefile檔案等。
2.make命令根據configure命令生成的Makefile檔案編譯Nginx工程, 並生成目標檔案、 最終
的二進位制檔案。
3.make install命令根據configure執行時的引數將Nginx部署到指定的安裝目錄, 包括相關目
錄的建立和二進位制檔案、 配置檔案的複製。

執行完 ./configure 會顯示如下:

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"