溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

給小白的 Nginx 30分鐘入門指南(小結(jié))

發(fā)布時間:2020-10-15 16:58:46 來源:腳本之家 閱讀:146 作者:運(yùn)維派 欄目:服務(wù)器

Nginx是一款輕量級的Web 服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等。

為什么要用Nginx?

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

1、作為 Web 服務(wù)器:

相比 Apache,Nginx 使用更少的資源,支持更多的并發(fā)連接,體現(xiàn)更高的效率,這點(diǎn)使 Nginx 尤其受到虛擬主機(jī)提供商的歡迎。在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品: Nginx在美國是做虛擬主機(jī)生意的老板們經(jīng)常選擇的軟件平臺之一,能夠支持高達(dá) 50000 個并發(fā)連接數(shù)的響應(yīng), 感謝Nginx 為我們選擇了 epoll and kqueue 作為開發(fā)模型。

Nginx作為負(fù)載均衡服務(wù)器: Nginx 既可以在內(nèi)部直接支持 Rails 和 PHP 程序?qū)ν膺M(jìn)行服務(wù), 也可以支持作為 HTTP代理 服務(wù)器對外進(jìn)行服務(wù)。Nginx采用C進(jìn)行編寫, 不論是系統(tǒng)資源開銷還是CPU使用效率都比 Perlbal 要好很多。

2、Nginx 配置簡潔, Apache 復(fù)雜:

Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個月也不需要重新啟動. 你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級。

Nginx 靜態(tài)處理性能比 Apache 高 3倍以上,Apache 對 PHP 支持比較簡單,Nginx 需要配合其他后端來使用 ,Apache 的組件比 Nginx 多。

3、最核心的區(qū)別在于:

apache是同步多進(jìn)程模型,一個連接對應(yīng)一個進(jìn)程;nginx是異步的,多個連接(萬級別)可以對應(yīng)一個進(jìn)程 。

4、兩者的擅長領(lǐng)域分別是:

nginx的優(yōu)勢是處理靜態(tài)請求,cpu內(nèi)存使用率低,apache適合處理動態(tài)請求,所以現(xiàn)在一般前端用nginx作為反向代理抗住壓力,apache作為后端處理動態(tài)請求。

Nginx 基本使用方法

系統(tǒng)平臺:CentOS release 6.6 (Final) 64位。

一、安裝編譯工具及庫文件

給小白的 Nginx 30分鐘入門指南(小結(jié))

二、首先要安裝 PCRE

1、PCRE 作用是讓 Nginx 支持 Rewrite 功能。下載 PCRE 安裝包,下載地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

2、解壓安裝包:

給小白的 Nginx 30分鐘入門指南(小結(jié))

3、進(jìn)入安裝包目錄

給小白的 Nginx 30分鐘入門指南(小結(jié))

4、編譯安裝

給小白的 Nginx 30分鐘入門指南(小結(jié))

5、查看pcre版本

給小白的 Nginx 30分鐘入門指南(小結(jié))

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

三、安裝 Nginx

1、下載 Nginx,下載地址:http://nginx.org/download/nginx-1.6.2.tar.gz

給小白的 Nginx 30分鐘入門指南(小結(jié))

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

2、解壓安裝包

給小白的 Nginx 30分鐘入門指南(小結(jié))

3、進(jìn)入安裝包目錄

給小白的 Nginx 30分鐘入門指南(小結(jié))

4、編譯安裝

給小白的 Nginx 30分鐘入門指南(小結(jié))

5、查看nginx版本

給小白的 Nginx 30分鐘入門指南(小結(jié))

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

到此,nginx安裝完成。

四、Nginx 配置

創(chuàng)建 Nginx 運(yùn)行使用的用戶 www:

給小白的 Nginx 30分鐘入門指南(小結(jié))

配置nginx.conf ,將/usr/local/webserver/nginx/conf/nginx.conf替換為以下內(nèi)容

給小白的 Nginx 30分鐘入門指南(小結(jié))

檢查配置文件ngnix.conf的正確性命令:

給小白的 Nginx 30分鐘入門指南(小結(jié))

給小白的 Nginx 30分鐘入門指南(小結(jié)) 

五、啟動 Nginx

Nginx 啟動命令如下:

給小白的 Nginx 30分鐘入門指南(小結(jié))

給小白的 Nginx 30分鐘入門指南(小結(jié))

六、訪問站點(diǎn)

從瀏覽器訪問我們配置的站點(diǎn)ip:

給小白的 Nginx 30分鐘入門指南(小結(jié))

Nginx 常用指令說明

1. main 全局配置

nginx在運(yùn)行時與具體業(yè)務(wù)功能(比如http服務(wù)或者email服務(wù)代理)無關(guān)的一些參數(shù),比如工作進(jìn)程數(shù),運(yùn)行的身份等。

woker_processes 2
在配置文件的頂級main部分,worker角色的工作進(jìn)程的個數(shù),master進(jìn)程是接收并分配請求給worker處理。這個數(shù)值簡單一點(diǎn)可以設(shè)置為cpu的核數(shù)grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果開啟了ssl和gzip更應(yīng)該設(shè)置成與邏輯CPU數(shù)量一樣甚至為2倍,可以減少I/O操作。如果nginx服務(wù)器還有其它服務(wù),可以考慮適當(dāng)減少。

 worker_cpu_affinity
也是寫在main部分。在高并發(fā)情況下,通過設(shè)置cpu粘性來降低由于多CPU核切換造成的寄存器等現(xiàn)場重建帶來的性能損耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

worker_connections 2048
寫在events部分。每一個worker進(jìn)程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含與客戶端或后端被代理服務(wù)器間等所有連接數(shù))。nginx作為反向代理服務(wù)器,計算公式 最大連接數(shù) = worker_processes * worker_connections/4,所以這里客戶端最大連接數(shù)是1024,這個可以增到到8192都沒關(guān)系,看情況而定,但不能超過后面的worker_rlimit_nofile。當(dāng)nginx作為http服務(wù)器時,計算公式里面是除以2。

worker_rlimit_nofile 10240
寫在main部分。默認(rèn)是沒有設(shè)置,可以限制為操作系統(tǒng)最大的限制65535。

 use epoll
寫在events部分。在Linux操作系統(tǒng)下,nginx默認(rèn)使用epoll事件模型,得益于此,nginx在Linux操作系統(tǒng)下效率相當(dāng)高。同時Nginx在OpenBSD或FreeBSD操作系統(tǒng)上采用類似于epoll的高效事件模型kqueue。在操作系統(tǒng)不支持這些高效模型時才使用select。

2. http服務(wù)器

與提供http服務(wù)相關(guān)的一些配置參數(shù)。例如:是否使用keepalive啊,是否使用gzip進(jìn)行壓縮等。

sendfile on
開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,減少用戶空間到內(nèi)核空間的上下文切換。對于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。

 keepalive_timeout 65 : 長連接超時時間,單位是秒,這個參數(shù)很敏感,涉及瀏覽器的種類、后端服務(wù)器的超時設(shè)置、操作系統(tǒng)的設(shè)置,可以另外起一片文章了。長連接請求大量小文件的時候,可以減少重建連接的開銷,但假如有大文件上傳,65s內(nèi)沒上傳完成會導(dǎo)致失敗。如果設(shè)置時間過長,用戶又多,長時間保持連接會占用大量資源。

 send_timeout : 用于指定響應(yīng)客戶端的超時時間。這個超時僅限于兩個連接活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關(guān)閉連接。

 client_max_body_size 10m
允許客戶端請求的最大單文件字節(jié)數(shù)。如果有上傳較大文件,請設(shè)置它的限制值

 client_body_buffer_size 128k
緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)

模塊http_proxy:

這個模塊實(shí)現(xiàn)的是nginx作為反向代理服務(wù)器的功能,包括緩存功能(另見文章)

proxy_connect_timeout 60
nginx跟后端服務(wù)器連接超時時間(代理連接超時)

proxy_read_timeout 60
連接成功后,與后端服務(wù)器兩個成功的響應(yīng)操作之間超時時間(代理接收超時)

proxy_buffer_size 4k
設(shè)置代理服務(wù)器(nginx)從后端realserver讀取并保存用戶頭信息的緩沖區(qū)大小,默認(rèn)與proxy_buffers大小相同,其實(shí)可以將這個指令值設(shè)的小一點(diǎn)

proxy_buffers 4 32k
proxy_buffers緩沖區(qū),nginx針對單個連接緩存來自后端realserver的響應(yīng),網(wǎng)頁平均在32k以下的話,這樣設(shè)置

proxy_busy_buffers_size 64k
高負(fù)荷下緩沖大?。╬roxy_buffers*2)

proxy_max_temp_file_size
當(dāng)proxy_buffers放不下后端服務(wù)器的響應(yīng)內(nèi)容時,會將一部分保存到硬盤的臨時文件中,這個值用來設(shè)置最大臨時文件大小,默認(rèn)1024M,它與proxy_cache沒有關(guān)系。大于這個值,將從upstream服務(wù)器傳回。設(shè)置為0禁用。

proxy_temp_file_write_size 64k
當(dāng)緩存被代理的服務(wù)器響應(yīng)到臨時文件時,這個選項(xiàng)限制每次寫臨時文件的大小。proxy_temp_path(可以在編譯的時候)指定寫到哪那個目錄。

proxy_pass,proxy_redirect見 location 部分。

模塊http_gzip:

gzip on : 開啟gzip壓縮輸出,減少網(wǎng)絡(luò)傳輸。

  1.  gzip_min_length 1k : 設(shè)置允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭得content-length中進(jìn)行獲取。默認(rèn)值是20。建議設(shè)置成大于1k的字節(jié)數(shù),小于1k可能會越壓越大。
  2. gzip_buffers 4 16k : 設(shè)置系統(tǒng)獲取幾個單位的緩存用于存儲gzip的壓縮結(jié)果數(shù)據(jù)流。4 16k代表以16k為單位,安裝原始數(shù)據(jù)大小以16k為單位的4倍申請內(nèi)存。
  3. gzip_http_version 1.0 : 用于識別 http 協(xié)議的版本,早期的瀏覽器不支持 Gzip 壓縮,用戶就會看到亂碼,所以為了支持前期版本加上了這個選項(xiàng),如果你用了 Nginx 的反向代理并期望也啟用 Gzip 壓縮的話,由于末端通信是 http/1.0,故請設(shè)置為 1.0。
  4. gzip_comp_level 6 : gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)
  5. gzip_types :匹配mime類型進(jìn)行壓縮,無論是否指定,”text/html”類型總是會被壓縮的。
  6. gzip_proxied any : Nginx作為反向代理的時候啟用,決定開啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含”Via”的 header頭。
  7. gzip_vary on : 和http頭有關(guān)系,會在響應(yīng)頭加個 Vary: Accept-Encoding ,可以讓前端的緩存服務(wù)器緩存經(jīng)過gzip壓縮的頁面,例如,用Squid緩存經(jīng)過Nginx壓縮的數(shù)據(jù)。

 3. server虛擬主機(jī)

http服務(wù)上支持若干虛擬主機(jī)。每個虛擬主機(jī)一個對應(yīng)的server配置項(xiàng),配置項(xiàng)里面包含該虛擬主機(jī)相關(guān)的配置。在提供mail服務(wù)的代理時,也可以建立若干server。每個server通過監(jiān)聽地址或端口來區(qū)分。

listen
監(jiān)聽端口,默認(rèn)80,小于1024的要以root啟動。可以為listen *:80、listen 127.0.0.1:80等形式。

server_name
服務(wù)器名,如localhost、www.example.com,可以通過正則匹配。

模塊http_stream

這個模塊通過一個簡單的調(diào)度算法來實(shí)現(xiàn)客戶端IP到后端服務(wù)器的負(fù)載均衡,upstream后接負(fù)載均衡器的名字,后端realserver以 host:port options; 方式組織在 {} 中。如果后端被代理的只有一臺,也可以直接寫在 proxy_pass 。

4. location

http服務(wù)中,某些特定的URL對應(yīng)的一系列配置項(xiàng)。

root /var/www/html
定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置。如果locationURL匹配的是子目錄或文件,root沒什么作用,一般放在server指令里面或/下。

index index.jsp index.html index.htm
定義路徑下默認(rèn)訪問的文件名,一般跟著root放

proxy_pass http:/backend
請求轉(zhuǎn)向backend定義的服務(wù)器列表,即反向代理,對應(yīng)upstream負(fù)載均衡器。也可以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;

這四個暫且這樣設(shè),如果深究的話,每一個都涉及到很復(fù)雜的內(nèi)容,也將通過另一篇文章來解讀。

關(guān)于location匹配規(guī)則的寫法,可以說尤為關(guān)鍵且基礎(chǔ)的,參考文章 nginx配置location總結(jié)及rewrite規(guī)則寫法;

5. 其它

5.1 訪問控制 allow/deny

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

給小白的 Nginx 30分鐘入門指南(小結(jié))

我們也常用 httpd-devel 工具的 htpasswd 來為訪問的路徑設(shè)置登錄密碼:

給小白的 Nginx 30分鐘入門指南(小結(jié))

這樣就生成了默認(rèn)使用CRYPT加密的密碼文件。打開上面nginx-status的兩行注釋,重啟nginx生效。

5.2 列出目錄 autoindex

Nginx默認(rèn)是不允許列出整個目錄的。如需此功能,打開nginx.conf文件,在location,server 或 http段中加入autoindex on;,另外兩個參數(shù)最好也加上去:

  1. autoindex_exact_size off; 默認(rèn)為on,顯示出文件的確切大小,單位是bytes。改為off后,顯示出文件的大概大小,單位是kB或者M(jìn)B或者GB autoindex_localtime on;
  2. 默認(rèn)為off,顯示的文件時間為GMT時間。改為on后,顯示的文件時間為文件的服務(wù)器時間

給小白的 Nginx 30分鐘入門指南(小結(jié))

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI