不敢相信,Nginx 還能這么玩?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
或許你會(huì)想:“Nginx 不就是用來(lái)部署網(wǎng)站的服務(wù)器嘛?這有何難?” 但其實(shí)這不過(guò)是九牛一毛罷了,Nginx 的實(shí)用操作和使用技巧還多著呢,下面這篇文章,就帶大家輕松入門 Nginx、并且循序漸進(jìn)地學(xué)習(xí) Nginx 真正的用法! 推薦觀看本文對(duì)應(yīng)的視頻版本,有更多操作演示哦:https://bilibili.com/video/BV1TW1LYkE59 一、Nginx 入門 - 牛刀小試首先要了解什么是 Nginx?注意讀音,是 Engine X,而不是恩靜因克斯。 根據(jù)官方定義,它是世界上最受歡迎的 Web 服務(wù)器、高性能負(fù)載均衡器、反向代理、API 網(wǎng)關(guān)和內(nèi)容緩存。 雖然聽不懂,但是感覺很厲害的樣子。
簡(jiǎn)單來(lái)說(shuō),Nginx 不僅能部署網(wǎng)站,而且相比其他的 Web 服務(wù)器,它能夠用更少的資源,同時(shí)處理更多用戶的請(qǐng)求,讓網(wǎng)站速度更快更穩(wěn)定,這也是企業(yè)選擇 Nginx 的原因。 下面我們就牛刀小試,用 Nginx 啟動(dòng)一個(gè)網(wǎng)站!
1、Nginx 安裝首先我們需要安裝 Nginx ,先到官網(wǎng)中根據(jù)操作系統(tǒng)下載一個(gè)穩(wěn)定版本的壓縮包,下載完成之后解壓一下。
如果是 Windows 系統(tǒng),雙擊 exe 文件啟動(dòng)即可;如果是 Mac 或 Linux 系統(tǒng),可以打開終端并進(jìn)入該目錄,手動(dòng)編譯安裝后執(zhí)行 Nginx 命令啟動(dòng)。
當(dāng)然也可以使用第三方的包管理工具,比如 Chocolatey(Windows)、Homebrew(Mac)、Yum(Linux)。 或者使用現(xiàn)成的服務(wù)器運(yùn)維面板,比如寶塔 Linux,可以傻瓜式一鍵安裝:
2、修改網(wǎng)頁(yè)文件啟動(dòng)成功后,我們?cè)L問本機(jī)域名
那如果想自己修改網(wǎng)頁(yè)內(nèi)容,怎么辦呢? 我們要找到 Nginx 的大腦,也就是配置文件。進(jìn)入配置目錄
我們找到這個(gè) index.html 文件,修改網(wǎng)頁(yè)的內(nèi)容并保存:
重新訪問就可以看到效果啦!
看到這里,恭喜你,已經(jīng)超過(guò) 30% 的程序員了!
二、Nginx 常用操作 - 明勁下面,我們要成為 Nginx 明勁武者。所謂明勁,就是要熟悉 Nginx 的基本配置和常用操作,能夠滿足企業(yè)開發(fā)中的大多數(shù)需求,如果你的目標(biāo)是開發(fā)崗,那么學(xué)完下面這些就足夠找工作了。 1、靜態(tài)文件服務(wù)我們開發(fā)好的網(wǎng)站,通常包含像 HTML、CSS、JavaScript、圖片等文件,由于這些文件的內(nèi)容在存儲(chǔ)時(shí)是固定的,被稱為靜態(tài)文件。 如果你要讓別人訪問到開發(fā)好的網(wǎng)站,只把網(wǎng)站文件放到服務(wù)器上還是不夠的,還需要一個(gè) Web 服務(wù)器,能夠接受用戶的訪問請(qǐng)求,并找到對(duì)應(yīng)位置的文件進(jìn)行響應(yīng)。 Nginx 最基本的功能,就是作為 Web 服務(wù)器提供靜態(tài)文件服務(wù)。 打開 Nginx 的配置文件 server { 保存配置,然后執(zhí)行
企業(yè)項(xiàng)目中,需要為特定路徑定義不同的處理規(guī)則,location 塊的配置會(huì)更復(fù)雜。支持根據(jù)請(qǐng)求路徑的特定部分、正則表達(dá)式等進(jìn)行匹配,比如到特定目錄去尋找圖片: server {
2、反向代理Nginx 的另一個(gè)常用功能是用作反向代理服務(wù)器。什么是反向代理呢?一句話:Nginx 作為中介,幫后端服務(wù)器接受請(qǐng)求。
反向代理有什么作用呢? 首先是請(qǐng)求轉(zhuǎn)發(fā)和解決跨域。比如在 location 塊中添加 proxy_pass 配置,可以將 Nginx 在 80 端口收到的 /api 路徑的請(qǐng)求轉(zhuǎn)發(fā)到本地 8080 端口的后端服務(wù)。 server { 這樣就隱藏了后端服務(wù)器的 IP 地址,讓客戶端完全感知不到后端服務(wù)器的存在,更加安全。
而且還能讓前端和后端的域名統(tǒng)一,解決了跨域問題。
反向代理還可以用于實(shí)現(xiàn)負(fù)載均衡。由于企業(yè)項(xiàng)目的流量巨大,通常需要有多臺(tái)后端服務(wù)器。Nginx 可以作為高性能網(wǎng)關(guān),統(tǒng)一接收請(qǐng)求,并將請(qǐng)求按照特定規(guī)則轉(zhuǎn)發(fā)到不同的后端服務(wù)器進(jìn)行處理,從而分散了請(qǐng)求壓力,避免單一服務(wù)器過(guò)載。
在 Nginx 中實(shí)現(xiàn)負(fù)載均衡非常簡(jiǎn)單,首先通過(guò) upstream 塊定義了一個(gè)名為 backend 的服務(wù)器組,其中包含兩個(gè)后端服務(wù)器,然后通過(guò)反向代理配置將請(qǐng)求轉(zhuǎn)發(fā)到這個(gè)服務(wù)器組即可: upstream backend { 這樣每次都訪問同一個(gè)地址,會(huì)交替返回兩種不同的內(nèi)容,這是因?yàn)?Nginx 的默認(rèn)負(fù)載均衡算法是輪詢,請(qǐng)求會(huì)被平均轉(zhuǎn)發(fā)到兩個(gè)不同的服務(wù)進(jìn)行處理。 反向代理還有更多的作用,比如緩存常見請(qǐng)求的響應(yīng)、減少后端負(fù)擔(dān),集中處理 SSL 加密、認(rèn)證和日志記錄等功能,后面會(huì)依次講解。
3、改寫請(qǐng)求和響應(yīng)第三個(gè) Nginx 的常用功能是改寫請(qǐng)求和響應(yīng)。在請(qǐng)求到達(dá)服務(wù)器或響應(yīng)返回給客戶端之前,Nginx 可以對(duì)其進(jìn)行修改。 改寫請(qǐng)求與響應(yīng)有什么作用呢?有幾個(gè)比較典型的場(chǎng)景: 1)控制瀏覽器緩存首先,設(shè)置響應(yīng)頭 可以幫助我們控制瀏覽器緩存。通過(guò) Nginx 的 location /images/ { 這樣,當(dāng)用戶訪問圖片時(shí),瀏覽器會(huì)在本地緩存這些圖片,下次訪問時(shí)就不用訪問服務(wù)器了,提高速度并減少對(duì)服務(wù)器的請(qǐng)求。
2)重定向請(qǐng)求重定向允許我們將請(qǐng)求從一個(gè)地址自動(dòng)引導(dǎo)到另一個(gè)地址,常見的應(yīng)用場(chǎng)景包括將 HTTP 請(qǐng)求重定向到 HTTPS,或者將舊地址重定向到新地址。 在 Nginx 中,可以使用 location /old-page { 當(dāng)用戶訪問某個(gè)過(guò)期頁(yè)面時(shí),會(huì)被重定向自動(dòng)跳轉(zhuǎn)到新網(wǎng)站。
3)URI 重寫比重定向更高級(jí)一些,Nginx 提供了 location /api/v1/ { 這樣一來(lái),后端就不用再關(guān)注
看到這里,恭喜你,超過(guò) 60% 的程序員了。
三、Nginx 高級(jí)操作 - 暗勁下面,我們要成為 Nginx 的暗勁高手。所謂暗勁,又分為 2 種境界。
暗勁境界的高手,挑戰(zhàn)大廠開發(fā)、架構(gòu)師、高級(jí)系統(tǒng)管理員崗位,不成問題。
1、Nginx 高級(jí)配置我們先挑戰(zhàn)小圓滿,Nginx 的配置項(xiàng)實(shí)在是太多了,這里我就挑選幾個(gè)相對(duì)實(shí)用的來(lái)講解。 1)日志記錄為了分析網(wǎng)站流量、用戶行為和報(bào)錯(cuò)信息,我們可以開啟 Nginx 日志功能。分為訪問日志和錯(cuò)誤日志。 訪問日志會(huì)記錄所有請(qǐng)求的信息,更全面,可以通過(guò)修改 access_log 指令調(diào)整日志存儲(chǔ)路徑: http { 而錯(cuò)誤日志僅記錄 Nginx 在處理請(qǐng)求時(shí)遇到的問題,錯(cuò)誤又分為 8 個(gè)級(jí)別:
可以為不同的級(jí)別指定不同的日志輸出路徑: access_log /rap/access.log custom_format; # 配置訪問日志 開啟日志功能后,就能直接在文件中查看日志了。
2)訪問控制如果有惡意用戶攻擊我們的網(wǎng)站,怎么辦? 莫慌,Nginx 提供了訪問控制功能,可以使用 server { 這樣一來(lái),攻擊者就訪問不了網(wǎng)站了!
3)限流為了保護(hù)網(wǎng)站,我們還可以使用 Nginx 的限流功能。比如下面這段配置,通過(guò)定義請(qǐng)求限流區(qū)域并應(yīng)用于根路徑,限制每個(gè) IP 地址在一分鐘內(nèi)最多只能發(fā)送 2 個(gè)請(qǐng)求。 # 定義限流區(qū)域,使用客戶端的二進(jìn)制 IP 地址作為唯一標(biāo)識(shí) 這樣后端服務(wù)就不被流量激增影響,能夠提高系統(tǒng)的穩(wěn)定性。 4)虛擬主機(jī)在企業(yè)開發(fā)中,我們?yōu)榱斯?jié)省成本,經(jīng)常會(huì)在同一臺(tái)服務(wù)器上部署多個(gè)網(wǎng)站項(xiàng)目,這時(shí)就需要使用 Nginx 的虛擬主機(jī)功能了。 每個(gè)網(wǎng)站通常就是一個(gè)虛擬主機(jī),會(huì)有一個(gè) server_name 名稱對(duì)應(yīng)訪問網(wǎng)站的域名,比如我這里配置 2 臺(tái)虛擬主機(jī): # 虛擬主機(jī)1 配置虛擬主機(jī)后,Nginx 就能夠根據(jù)請(qǐng)求的域名找到對(duì)應(yīng)的網(wǎng)站配置,并處理請(qǐng)求。
5)其他除了上面這些,還有很多企業(yè)開發(fā)中可能會(huì)用到的 Nginx 高級(jí)配置和技巧。 比如可以:
此外,Nginx 支持 WebSocket、HTTPS 和 HTTP/2 等多種協(xié)議,還可以配置 Gzip 壓縮來(lái)減少傳輸?shù)臄?shù)據(jù)量,進(jìn)一步優(yōu)化性能。 最后,Nginx 自身也支持一系列性能調(diào)優(yōu)的配置,比如工作進(jìn)程與連接數(shù)配置,可以從容應(yīng)對(duì)高并發(fā)和大流量場(chǎng)景。 worker_processes auto; # 自動(dòng)檢測(cè) CPU 核心數(shù),設(shè)置工作進(jìn)程數(shù)
2、Nginx 工具和模塊生態(tài)想成為 Nginx 大圓滿高手,就要懂得利用工具和生態(tài),比如可視化工具、模塊和開源項(xiàng)目。 首先,Nginx 的配置和運(yùn)維對(duì)初學(xué)者來(lái)說(shuō)可能比較復(fù)雜,這時(shí)可以利用 Nginx 官方推出的 Nginx Amplify、輕量級(jí)的 Nginx-UI 或者寶塔 Linux 服務(wù)器管理面板等可視化工具,通過(guò)圖形界面來(lái)更直觀地查看配置、分析流量和性能指標(biāo),從而提高操作和運(yùn)維效率。
其次,Nginx 的功能并不是一成不變的,我們可以通過(guò)各種各樣的模塊來(lái)擴(kuò)展它的能力,比如我們常用于健康檢查的 nginx_upstream_check_module 模塊、實(shí)現(xiàn) JavaScript 語(yǔ)言擴(kuò)展的 njs 模塊。 但手動(dòng)安裝模塊的過(guò)程是比較繁瑣的,需要下載源碼并進(jìn)行編譯。 這種情況下,我們就可以選擇 OpenResty 這樣一個(gè)基于 Nginx 的高性能 Web 平臺(tái),它集成了大量模塊、依賴項(xiàng)和 Lua 腳本庫(kù),能夠讓你直接在 Nginx 里開發(fā)復(fù)雜的業(yè)務(wù)邏輯,充分利用 Nginx 的非阻塞 I/O 模型來(lái)提升應(yīng)用的性能,適合超高并發(fā)的場(chǎng)景。 比如下圖是網(wǎng)上的一個(gè)基于 OpenResty 實(shí)現(xiàn)的灰度發(fā)布架構(gòu):
轉(zhuǎn)自https://www.cnblogs.com/yupi/p/18519885 該文章在 2025/1/20 10:08:47 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |