1. 程式人生 > >CentOS 從原始碼編譯並安裝 Nginx

CentOS 從原始碼編譯並安裝 Nginx

Linux 系統要求

Nginx 在 Linux 作業系統下執行的時候,要想獲取高併發能力,要求 Linux 核心必須在 2.6 以上,可通過以下命令檢視 Linux 核心版本。

$ uname -r
2.6.18-128.e15

安裝 Nginx 的必備軟體

通過以下命令安裝使用 Nginx 必備的軟體:

$ sudo yum update
$ sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

其中:

  1. gcc 和 gcc-c++ 為 c/c++ 編譯器
  2. PCRE 即 Perl 相容正則表示式,如果我們在 nginx.conf 中使用到了正則表示式,那麼必須在編譯時將 pcre 庫編譯進 Nginx。pcre-devel 是使用 PCRE 做二次開發時所需要的開發庫,包括標頭檔案,這也是編譯時所必需的。
  3. zlib 庫用於對 HTTP 包的內容做 gzip 格式的壓縮。zlib-devel 是二次開發所需要的庫。
  4. open-ssl 用來支援 SSL。

編譯與安裝

從 Nginx 官網  https://nginx.org/en/download.html 下載最新的 Nginx 原始碼,放在任意目錄下,然後解壓

$ tar -xf nginx-1.xx.0.tar.gz

進入解壓後文件夾,執行以下命令

$ ./configure
$ make 
$ sudo make install

其中,./configure 用來生成 make 所必須的一些檔案。Nginx 安裝完成後的目錄預設在 /usr/local/nginx 。

優化 Linux 核心引數

預設的 Linux 核心引數不符合用於支援高併發訪問的 web 伺服器的定義,因此需要優化核心引數,需要修改 /etc/sysctl.conf 檔案,常用配置如下。

fs.file-max = 999999              # 程序可以同時開啟的最大控制代碼數,直接限制最大併發連線數
net.ipv4.tcp_tw_reuse = 1         # 1表示允許將 TIME-WAIT 狀態的 socket 重新用於新的 TCP 連結
net.ipv4.tcp_keepalive_time = 600 # 啟用 keepalive 時,TCP 傳送 keepalive 訊息的頻度
net.ipv4.tcp_fin_timeout 30       # 伺服器主動關閉連線時,socket 保持在 FIN-WAIT-2 狀態的時間 
net.ipv4.tcp_max_tw_buckets = 5000          # TIME-WAIT 套接字數量的最大值
net.ipv4.ip_local_port_range = 1024  61000  # UDP 和 TCP 連線中本地埠取值範圍
net.ipv4.tcp_rmem = 4096 32768 262142       # TCP 接收快取的最小值,預設值,最大值
net.ipv4.tcp_wmem = 4096 32768 262142       # TCP 傳送快取的最小值,預設值,最大值
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.tcp_syncookies = 1            # 該引數與效能無關,用於解決 TCP 的 SYN 攻擊 
net.tcp_max_syn.backlog = 1024    # TCP 三次握手接收 SYN 請求佇列的最大長度

然後執行 sysctl -p 即可使上述命令生效。

參考書籍:《深入理解 Nginx:模組開發與架構解析》第二版。