您當前的位置:首頁 > 娛樂

給小白的 Nginx 30分鐘入門指南

作者:由 阿里云云棲號 發表于 娛樂時間:2018-02-08

摘要:

Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站使用者有:百度、京東、新浪、網易、騰訊、淘寶等。

作者:駐雲科技

原文:

http://

click。aliyun。com/m/4200

2/

為什麼要用Nginx?

目前 Nginx 的主力競爭對手莫過於 Apache ,在這裡小編對兩者做一個簡單的對比,幫助大家更好的理解 Nginx 的優勢。

1、作為 Web 伺服器:

相比 Apache,Nginx 使用更少的資源,支援更多的併發連線,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品: Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平臺之一,能夠支援高達 50000 個併發連線數的響應, 感謝Nginx 為我們選擇了 epoll and kqueue 作為開發模型。

Nginx作為負載均衡伺服器: Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務, 也可以支援作為 HTTP代理 伺服器對外進行服務。Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。

2、Nginx 配置簡潔, Apache 複雜:

Nginx 啟動特別容易, 並且幾乎可以做到7*24不間斷執行,即使執行數個月也不需要重新啟動。 你還能夠不間斷服務的情況下進行軟體版本的升級。

Nginx 靜態處理效能比 Apache 高 3倍以上,Apache 對 PHP 支援比較簡單,Nginx 需要配合其他後端來使用 ,Apache 的元件比 Nginx 多。

3、最核心的區別在於:

apache是同步多程序模型,一個連線對應一個程序;nginx是非同步的,多個連線(萬級別)可以對應一個程序 。

4、兩者的擅長領域分別是:

nginx的優勢是處理靜態請求,cpu記憶體使用率低,apache適合處理動態請求,所以現在一般前端用nginx作為反向代理抗住壓力,apache作為後端處理動態請求。

Nginx 基本使用方法

系統平臺:CentOS release 6。6 (Final) 64位。

一、安裝編譯工具及庫檔案

給小白的 Nginx 30分鐘入門指南

二、首先要安裝 PCRE

1、PCRE 作用是讓 Nginx 支援 Rewrite 功能。下載 PCRE 安裝包,下載地址:

http://

downloads。sourceforge。net

/project/pcre/pcre/8。35/pcre-8。35。tar。gz

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

2、解壓安裝包:

給小白的 Nginx 30分鐘入門指南

3、進入安裝包目錄

給小白的 Nginx 30分鐘入門指南

4、編譯安裝

給小白的 Nginx 30分鐘入門指南

5、檢視pcre版本

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

三、安裝 Nginx

1、下載 Nginx,下載地址:

http://

nginx。org/download/ngin

x-1。6。2。tar。gz

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

2、解壓安裝包

給小白的 Nginx 30分鐘入門指南

3、進入安裝包目錄

給小白的 Nginx 30分鐘入門指南

4、編譯安裝

給小白的 Nginx 30分鐘入門指南

5、檢視nginx版本

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

到此,nginx安裝完成。

四、Nginx 配置

建立 Nginx 執行使用的使用者 www:

給小白的 Nginx 30分鐘入門指南

配置nginx。conf ,將/usr/local/webserver/nginx/conf/nginx。conf替換為以下內容

給小白的 Nginx 30分鐘入門指南

檢查配置檔案ngnix。conf的正確性命令:

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

五、啟動 Nginx

Nginx 啟動命令如下:

給小白的 Nginx 30分鐘入門指南

給小白的 Nginx 30分鐘入門指南

六、訪問站點

從瀏覽器訪問我們配置的站點ip:

給小白的 Nginx 30分鐘入門指南

Nginx 常用指令說明

1. main 全域性配置

nginx在執行時與具體業務功能(比如http服務或者email服務代理)無關的一些引數,比如工作程序數,執行的身份等。

woker_processes 2

在配置檔案的頂級main部分,worker角色的工作程序的個數,master程序是接收並分配請求給worker處理。這個數值簡單一點可以設定為cpu的核數grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果開啟了ssl和gzip更應該設定成與邏輯CPU數量一樣甚至為2倍,可以減少I/O操作。如果nginx伺服器還有其它服務,可以考慮適當減少。

worker_cpu_affinity

也是寫在main部分。在高併發情況下,透過設定cpu粘性來降低由於多CPU核切換造成的暫存器等現場重建帶來的效能損耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

worker_connections 2048

寫在events部分。每一個worker程序能併發處理(發起)的最大連線數(包含與客戶端或後端被代理伺服器間等所有連線數)。nginx作為反向代理伺服器,計算公式 最大連線數 = worker_processes * worker_connections/4,所以這裡客戶端最大連線數是1024,這個可以增到到8192都沒關係,看情況而定,但不能超過後面的worker_rlimit_nofile。當nginx作為http伺服器時,計算公式裡面是除以2。

worker_rlimit_nofile 10240

寫在main部分。預設是沒有設定,可以限制為作業系統最大的限制65535。

use epoll

寫在events部分。在Linux作業系統下,nginx預設使用epoll事件模型,得益於此,nginx在Linux作業系統下效率相當高。同時Nginx在OpenBSD或FreeBSD作業系統上採用類似於epoll的高效事件模型kqueue。在作業系統不支援這些高效模型時才使用select。

2. http伺服器

與提供http服務相關的一些配置引數。例如:是否使用keepalive啊,是否使用gzip進行壓縮等。

sendfile on

開啟高效檔案傳輸模式,sendfile指令指定nginx是否呼叫sendfile函式來輸出檔案,減少使用者空間到核心空間的上下文切換。對於普通應用設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設定為off,以平衡磁碟與網路I/O處理速度,降低系統的負載。

keepalive_timeout 65 : 長連線超時時間,單位是秒,這個引數很敏感,涉及瀏覽器的種類、後端伺服器的超時設定、作業系統的設定,可以另外起一片文章了。長連線請求大量小檔案的時候,可以減少重建連線的開銷,但假如有大檔案上傳,65s內沒上傳完成會導致失敗。如果設定時間過長,使用者又多,長時間保持連線會佔用大量資源。

send_timeout : 用於指定響應客戶端的超時時間。這個超時僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連線。

client_max_body_size 10m

允許客戶端請求的最大單檔案位元組數。如果有上傳較大檔案,請設定它的限制值

client_body_buffer_size 128k

緩衝區代理緩衝使用者端請求的最大位元組數

模組http_proxy:

這個模組實現的是nginx作為反向代理伺服器的功能,包括快取功能(另見文章)

proxy_connect_timeout 60

nginx跟後端伺服器連線超時時間(代理連線超時)

proxy_read_timeout 60

連線成功後,與後端伺服器兩個成功的響應操作之間超時時間(代理接收超時)

proxy_buffer_size 4k

設定代理伺服器(nginx)從後端realserver讀取並儲存使用者頭資訊的緩衝區大小,預設與proxy_buffers大小相同,其實可以將這個指令值設的小一點

proxy_buffers 4 32k

proxy_buffers緩衝區,nginx針對單個連線快取來自後端realserver的響應,網頁平均在32k以下的話,這樣設定

proxy_busy_buffers_size 64k

高負荷下緩衝大小(proxy_buffers*2)

proxy_max_temp_file_size

當proxy_buffers放不下後端伺服器的響應內容時,會將一部分儲存到硬碟的臨時檔案中,這個值用來設定最大臨時檔案大小,預設1024M,它與proxy_cache沒有關係。大於這個值,將從upstream伺服器傳回。設定為0禁用。

proxy_temp_file_write_size 64k

當快取被代理的伺服器響應到臨時檔案時,這個選項限制每次寫臨時檔案的大小。proxy_temp_path(可以在編譯的時候)指定寫到哪那個目錄。

proxy_pass,proxy_redirect見 location 部分。

模組http_gzip:

gzip on : 開啟gzip壓縮輸出,減少網路傳輸。

gzip_min_length 1k : 設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭得content-length中進行獲取。預設值是20。建議設定成大於1k的位元組數,小於1k可能會越壓越大。

gzip_buffers 4 16k : 設定系統獲取幾個單位的快取用於儲存gzip的壓縮結果資料流。4 16k代表以16k為單位,安裝原始資料大小以16k為單位的4倍申請記憶體。

gzip_http_version 1。0 : 用於識別 http 協議的版本,早期的瀏覽器不支援 Gzip 壓縮,使用者就會看到亂碼,所以為了支援前期版本加上了這個選項,如果你用了 Nginx 的反向代理並期望也啟用 Gzip 壓縮的話,由於末端通訊是 http/1。0,故請設定為 1。0。

gzip_comp_level 6 : gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

gzip_types :匹配mime型別進行壓縮,無論是否指定,”text/html”型別總是會被壓縮的。

gzip_proxied any : Nginx作為反向代理的時候啟用,決定開啟或者關閉後端伺服器返回的結果是否壓縮,匹配的前提是後端伺服器必須要返回包含”Via”的 header頭。

gzip_vary on : 和http頭有關係,會在響應頭加個 Vary: Accept-Encoding ,可以讓前端的快取伺服器快取經過gzip壓縮的頁面,例如,用Squid快取經過Nginx壓縮的資料。。

3. server虛擬主機

http服務上支援若干虛擬主機。每個虛擬主機一個對應的server配置項,配置項裡面包含該虛擬主機相關的配置。在提供mail服務的代理時,也可以建立若干server。每個server透過監聽地址或埠來區分。

listen

監聽埠,預設80,小於1024的要以root啟動。可以為listen *:80、listen 127。0。0。1:80等形式。

server_name

伺服器名,如localhost、http://www。example。com,可以透過正則匹配。

模組http_stream

這個模組透過一個簡單的排程演算法來實現客戶端IP到後端伺服器的負載均衡,upstream後接負載均衡器的名字,後端realserver以 host:port options; 方式組織在 {} 中。如果後端被代理的只有一臺,也可以直接寫在 proxy_pass 。

4. location

http服務中,某些特定的URL對應的一系列配置項。

root /var/www/html

定義伺服器的預設網站根目錄位置。如果locationURL匹配的是子目錄或檔案,root沒什麼作用,一般放在server指令裡面或/下。

index index。jsp index。html index。htm

定義路徑下預設訪問的檔名,一般跟著root放

proxy_pass http:/backend

請求轉向backend定義的伺服器列表,即反向代理,對應upstream負載均衡器。也可以proxy_pass

http://

ip

:port。

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

這四個暫且這樣設,如果深究的話,每一個都涉及到很複雜的內容,也將透過另一篇文章來解讀。

關於location匹配規則的寫法,可以說尤為關鍵且基礎的,參考文章 nginx配置location總結及rewrite規則寫法;

5. 其它

5。1 訪問控制 allow/deny

Nginx 的訪問控制模組預設就會安裝,而且寫法也非常簡單,可以分別有多個allow,deny,允許或禁止某個ip或ip段訪問,依次滿足任何一個規則就停止往下匹配。如:

給小白的 Nginx 30分鐘入門指南

我們也常用 httpd-devel 工具的 htpasswd 來為訪問的路徑設定登入密碼:

給小白的 Nginx 30分鐘入門指南

這樣就生成了預設使用CRYPT加密的密碼檔案。開啟上面nginx-status的兩行註釋,重啟nginx生效。

5.2 列出目錄 autoindex

Nginx預設是不允許列出整個目錄的。如需此功能,開啟nginx。conf檔案,在location,server 或 http段中加入autoindex on;,另外兩個引數最好也加上去:

autoindex_exact_size off; 預設為on,顯示出檔案的確切大小,單位是bytes。改為off後,顯示出檔案的大概大小,單位是kB或者MB或者GB

autoindex_localtime on;

預設為off,顯示的檔案時間為GMT時間。改為on後,顯示的檔案時間為檔案的伺服器時間

給小白的 Nginx 30分鐘入門指南

更多技術乾貨敬請關注雲棲社群知乎機構號:阿里云云棲社群

標簽: nginx  Proxy  http  伺服器