超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

不敢相信,Nginx 還能這么玩?

freeflydom
2025年1月20日 10:8 本文熱度 386

或許你會(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ī)域名 localhost:80 (80 為默認(rèn)端口,可以省略),就可以看到 Nginx 為我們提供的默認(rèn)網(wǎng)站了。

那如果想自己修改網(wǎng)頁(yè)內(nèi)容,怎么辦呢?

我們要找到 Nginx 的大腦,也就是配置文件。進(jìn)入配置目錄 conf ,就可以看到配置文件 nginx.conf 了。配置文件由塊和指令組成,可以通過(guò)修改配置實(shí)現(xiàn)各種功能,比如通過(guò) location 塊和 root 指令配置網(wǎng)站文件的根路徑:

我們找到這個(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 的配置文件 nginx.conf ,添加 location 塊,用于根據(jù)請(qǐng)求地址處理請(qǐng)求。比如我們通過(guò) root 指令定義靜態(tài)文件根目錄,通過(guò) index 指令定義默認(rèn)首頁(yè)文件:

server {
 listen       80;
 server_name localhost;

 location / {
   root /tmp/nginx/html;  # 指定靜態(tài)文件根目錄
   index index.html;  # 默認(rèn)首頁(yè)
}
}

保存配置,然后執(zhí)行 nginx -s reload 命令來(lái)重載配置,再次訪問網(wǎng)站時(shí)就會(huì)返回剛配置的目錄下的首頁(yè)文件。

企業(yè)項(xiàng)目中,需要為特定路徑定義不同的處理規(guī)則,location 塊的配置會(huì)更復(fù)雜。支持根據(jù)請(qǐng)求路徑的特定部分、正則表達(dá)式等進(jìn)行匹配,比如到特定目錄去尋找圖片:

server {
 listen 80;                          # 監(jiān)聽 80 端口
 server_name example.com;            # 指定域名

 # 根路徑的配置,返回靜態(tài)文件
 location / {
   root /var/www/html;             # 指向靜態(tài)文件的根目錄
   index index.html;               # 默認(rèn)首頁(yè)文件
   try_files $uri $uri/ =404;     # 如果文件不存在,則返回 404
}

 # 處理以 /images/ 開頭的請(qǐng)求
 location /images/ {
   root /var/www/assets/images/;  # 指向圖片目錄
}

 # 正則匹配,處理以 .php 結(jié)尾的請(qǐng)求
 location \.php$ {
   include fastcgi_params;          # 包含 FastCGI 參數(shù)
   fastcgi_pass 127.0.0.1:9000;    # 將請(qǐng)求轉(zhuǎn)發(fā)到 FastCGI 處理程序
   fastcgi_index index.php;         # 設(shè)置 FastCGI 的默認(rèn)索引文件
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # 定義腳本文件名
}
}

 

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 {
   listen 80;  # 監(jiān)聽 80 端口
   server_name localhost;  # 替換為你的域名或 IP 地址

   location /api {
       proxy_pass http://localhost:8080;  # 代理到本地的 8080 端口
  }
}

這樣就隱藏了后端服務(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 {
 server localhost:8080;  # 第一個(gè)后端服務(wù)器
 server localhost:8081;  # 第二個(gè)后端服務(wù)器
}

server {
 listen 80;
 server_name localhost;

 location /api {
   proxy_pass http://backend;  # 代理到負(fù)載均衡的后端服務(wù)器
}
}

這樣每次都訪問同一個(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 的 add_header 指令,可以為響應(yīng)添加自定義的 HTTP 頭部,從而指導(dǎo)瀏覽器如何處理緩存。比如設(shè)置緩存有效期為 30 天:

location /images/ {
   root /tmp/nginx/html;
   expires 30d;  # 設(shè)置緩存有效期為 30 天
   add_header Cache-Control "public";  # 設(shè)置緩存頭
}

這樣,當(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 中,可以使用 return 指令 + 302 狀態(tài)碼配置重定向:

location /old-page {
   return 302 https://codefather.cn  # 重定向到新頁(yè)面
}

當(dāng)用戶訪問某個(gè)過(guò)期頁(yè)面時(shí),會(huì)被重定向自動(dòng)跳轉(zhuǎn)到新網(wǎng)站。

 

3)URI 重寫

比重定向更高級(jí)一些,Nginx 提供了 rewrite 指令,支持正則表達(dá)式,可以非常靈活地將請(qǐng)求重寫為不同的路徑或網(wǎng)站。比如將 /api/v1/users 的請(qǐng)求重寫為 /api/users

location /api/v1/ {
   rewrite ^/api/v1/(.*)$ /api/$1 break;  # 將 /api/v1/ 的請(qǐng)求重寫為 /api/
}

這樣一來(lái),后端就不用再關(guān)注 /api/v1/ 的存在了,這種方法在網(wǎng)站遷移或者結(jié)構(gòu)調(diào)整時(shí)非常有用。大家也不用去記憶改寫的具體語(yǔ)法,隨用隨查就行。

 


 

看到這里,恭喜你,超過(guò) 60% 的程序員了。

 

三、Nginx 高級(jí)操作 - 暗勁

下面,我們要成為 Nginx 的暗勁高手。所謂暗勁,又分為 2 種境界。

  • 熟悉 Nginx 的各種特性和高級(jí)配置,能更快速地配置和管理 Nginx,為小圓滿

  • 熟悉 Nginx 工具和模塊生態(tài),能夠靈活運(yùn)用 Nginx 進(jìn)行架構(gòu)設(shè)計(jì)、并巧妙地解決各種需求,為大圓滿。

暗勁境界的高手,挑戰(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 {
 log_format custom_format 'yupi $remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
 
 access_log /rap/access.log custom_format;  # 配置訪問日志

 server {
   listen       80;
   server_name localhost;
 
   location / {
     root /tmp/nginx/html;  # 指定靜態(tài)文件根目錄
     index index.html;  # 默認(rèn)首頁(yè)
  }
}
}

而錯(cuò)誤日志僅記錄 Nginx 在處理請(qǐng)求時(shí)遇到的問題,錯(cuò)誤又分為 8 個(gè)級(jí)別:

可以為不同的級(jí)別指定不同的日志輸出路徑:

access_log /rap/access.log custom_format;  # 配置訪問日志
error_log /rap/error.log error;  # 配置錯(cuò)誤日志

開啟日志功能后,就能直接在文件中查看日志了。

 

2)訪問控制

如果有惡意用戶攻擊我們的網(wǎng)站,怎么辦?

莫慌,Nginx 提供了訪問控制功能,可以使用 allow 和 deny 指令對(duì) IP 訪問進(jìn)行限制,比如不讓 127.0.0.1 這個(gè) IP 訪問:

server {
   listen 80;
   server_name localhost;

   location / {
       # 拒絕特定 IP 地址
       deny 127.0.0.1;
       # 除了寫具體 ip 外,也可以寫網(wǎng)段
       deny 192.168.1.0/24;
       # 允許所有其他 IP 地址
       allow all;
       proxy_pass http://localhost:8081;
   
  }
}

這樣一來(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í)
# zone=one:10m 表示創(chuàng)建一個(gè)名為 "one" 的內(nèi)存區(qū)域,大小為 10MB
# rate=2r/m 表示每個(gè) IP 地址每分鐘最多允許 2 個(gè)請(qǐng)求
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m;

server {
 listen 80;  # 監(jiān)聽 80 端口,接收 HTTP 請(qǐng)求
 server_name localhost;  # 設(shè)置服務(wù)器名稱為 localhost

 location / {  # 配置根路徑的請(qǐng)求處理
   # 應(yīng)用限流配置,使用之前定義的 "one" 區(qū)域
   # burst=10 表示可以允許最多 10 個(gè)額外請(qǐng)求超出正常限速
   # nodelay 表示在突發(fā)請(qǐng)求情況下,這 10 個(gè)請(qǐng)求將立即被處理,不會(huì)被延遲
   limit_req zone=one burst=10 nodelay;

   # 將請(qǐng)求轉(zhuǎn)發(fā)到本地的 8080 端口
   proxy_pass http://localhost:8080;  # 反向代理請(qǐng)求到后端服務(wù)
}
}

這樣后端服務(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
server {
   listen 80;                           # 監(jiān)聽 80 端口
   server_name localhost;               # 配置域名為 example.com

   root /tmp/nginx/html;            # 網(wǎng)站根目錄
   index localhost.html;                # 默認(rèn)首頁(yè)
}

# 虛擬主機(jī)2
server {
   listen 80;                           # 監(jiān)聽 80 端口
   server_name 127.0.0.1;               # 配置域名為 another.com

   root /tmp/nginx/html;            # 網(wǎng)站根目錄
   index 127.html;                      # 默認(rèn)首頁(yè)
}

配置虛擬主機(jī)后,Nginx 就能夠根據(jù)請(qǐng)求的域名找到對(duì)應(yīng)的網(wǎng)站配置,并處理請(qǐng)求。

 

5)其他

除了上面這些,還有很多企業(yè)開發(fā)中可能會(huì)用到的 Nginx 高級(jí)配置和技巧。

比如可以:

  • 通過(guò)后端響應(yīng)緩存配置,讓 Nginx 直接從緩存中讀取數(shù)據(jù)來(lái)響應(yīng)請(qǐng)求,這樣能夠顯著提升性能、減少服務(wù)器壓力。

  • 通過(guò)正向代理的設(shè)置,Nginx 可以作為 “跳板機(jī)”,幫客戶端發(fā)起請(qǐng)求,從而訪問原本無(wú)法直接訪問的資源。

  • 通過(guò)自定義錯(cuò)誤頁(yè)面,能夠給用戶提供更友好的錯(cuò)誤提示信息。

此外,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ù)

events {
   worker_connections 2048; # 每個(gè)工作進(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)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved