LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

或許你會想:“Nginx 不就是用來部署網站的服務器嘛?這有何難?”

但其實這不過是九牛一毛罷了,Nginx 的實用操作和使用技巧還多著呢,下面這篇文章,就帶大家輕松入門 Nginx、并且循序漸進地學習 Nginx 真正的用法!

推薦觀看本文對應的視頻版本,有更多操作演示哦:https://bilibili.com/video/BV1TW1LYkE59

一、Nginx 入門 - 牛刀小試

首先要了解什么是 Nginx?注意讀音,是 Engine X,而不是恩靜因克斯。

根據官方定義,它是世界上最受歡迎的 Web 服務器、高性能負載均衡器、反向代理、API 網關和內容緩存。

雖然聽不懂,但是感覺很厲害的樣子。

簡單來說,Nginx 不僅能部署網站,而且相比其他的 Web 服務器,它能夠用更少的資源,同時處理更多用戶的請求,讓網站速度更快更穩定,這也是企業選擇 Nginx 的原因。

下面我們就牛刀小試,用 Nginx 啟動一個網站!

 

1、Nginx 安裝

首先我們需要安裝 Nginx ,先到官網中根據操作系統下載一個穩定版本的壓縮包,下載完成之后解壓一下。

如果是 Windows 系統,雙擊 exe 文件啟動即可;如果是 Mac 或 Linux 系統,可以打開終端并進入該目錄,手動編譯安裝后執行 Nginx 命令啟動。

當然也可以使用第三方的包管理工具,比如 Chocolatey(Windows)、Homebrew(Mac)、Yum(Linux)。

或者使用現成的服務器運維面板,比如寶塔 Linux,可以傻瓜式一鍵安裝:

 

2、修改網頁文件

啟動成功后,我們訪問本機域名 localhost:80 (80 為默認端口,可以省略),就可以看到 Nginx 為我們提供的默認網站了。

那如果想自己修改網頁內容,怎么辦呢?

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

我們找到這個 index.html 文件,修改網頁的內容并保存:

重新訪問就可以看到效果啦!

看到這里,恭喜你,已經超過 30% 的程序員了!

 

二、Nginx 常用操作 - 明勁

下面,我們要成為 Nginx 明勁武者。所謂明勁,就是要熟悉 Nginx 的基本配置和常用操作,能夠滿足企業開發中的大多數需求,如果你的目標是開發崗,那么學完下面這些就足夠找工作了。

1、靜態文件服務

我們開發好的網站,通常包含像 HTML、CSS、JavaScript、圖片等文件,由于這些文件的內容在存儲時是固定的,被稱為靜態文件。

如果你要讓別人訪問到開發好的網站,只把網站文件放到服務器上還是不夠的,還需要一個 Web 服務器,能夠接受用戶的訪問請求,并找到對應位置的文件進行響應。

Nginx 最基本的功能,就是作為 Web 服務器提供靜態文件服務。

打開 Nginx 的配置文件 nginx.conf ,添加 location 塊,用于根據請求地址處理請求。比如我們通過 root 指令定義靜態文件根目錄,通過 index 指令定義默認首頁文件:

server {
 listen       80;
 server_name localhost;

 location / {
   root /tmp/nginx/html;  # 指定靜態文件根目錄
   index index.html;  # 默認首頁
}
}

保存配置,然后執行 nginx -s reload 命令來重載配置,再次訪問網站時就會返回剛配置的目錄下的首頁文件。

企業項目中,需要為特定路徑定義不同的處理規則,location 塊的配置會更復雜。支持根據請求路徑的特定部分、正則表達式等進行匹配,比如到特定目錄去尋找圖片:

server {
 listen 80;                          # 監聽 80 端口
 server_name example.com;            # 指定域名

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

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

 # 正則匹配,處理以 .php 結尾的請求
 location \.php$ {
   include fastcgi_params;          # 包含 FastCGI 參數
   fastcgi_pass 127.0.0.1:9000;    # 將請求轉發到 FastCGI 處理程序
   fastcgi_index index.php;         # 設置 FastCGI 的默認索引文件
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  # 定義腳本文件名
}
}

 

2、反向代理

Nginx 的另一個常用功能是用作反向代理服務器。什么是反向代理呢?一句話:Nginx 作為中介,幫后端服務器接受請求。

反向代理有什么作用呢?

首先是請求轉發和解決跨域。比如在 location 塊中添加 proxy_pass 配置,可以將 Nginx 在 80 端口收到的 /api 路徑的請求轉發到本地 8080 端口的后端服務。

server {
   listen 80;  # 監聽 80 端口
   server_name localhost;  # 替換為你的域名或 IP 地址

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

這樣就隱藏了后端服務器的 IP 地址,讓客戶端完全感知不到后端服務器的存在,更加安全。

而且還能讓前端和后端的域名統一,解決了跨域問題。

反向代理還可以用于實現負載均衡。由于企業項目的流量巨大,通常需要有多臺后端服務器。Nginx 可以作為高性能網關,統一接收請求,并將請求按照特定規則轉發到不同的后端服務器進行處理,從而分散了請求壓力,避免單一服務器過載。

在 Nginx 中實現負載均衡非常簡單,首先通過 upstream 塊定義了一個名為 backend 的服務器組,其中包含兩個后端服務器,然后通過反向代理配置將請求轉發到這個服務器組即可:

upstream backend {
 server localhost:8080;  # 第一個后端服務器
 server localhost:8081;  # 第二個后端服務器
}

server {
 listen 80;
 server_name localhost;

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

這樣每次都訪問同一個地址,會交替返回兩種不同的內容,這是因為 Nginx 的默認負載均衡算法是輪詢,請求會被平均轉發到兩個不同的服務進行處理。

反向代理還有更多的作用,比如緩存常見請求的響應、減少后端負擔,集中處理 SSL 加密、認證和日志記錄等功能,后面會依次講解。

 

3、改寫請求和響應

第三個 Nginx 的常用功能是改寫請求和響應。在請求到達服務器或響應返回給客戶端之前,Nginx 可以對其進行修改。

改寫請求與響應有什么作用呢?有幾個比較典型的場景:

1)控制瀏覽器緩存

首先,設置響應頭 可以幫助我們控制瀏覽器緩存。通過 Nginx 的 add_header 指令,可以為響應添加自定義的 HTTP 頭部,從而指導瀏覽器如何處理緩存。比如設置緩存有效期為 30 天:

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

這樣,當用戶訪問圖片時,瀏覽器會在本地緩存這些圖片,下次訪問時就不用訪問服務器了,提高速度并減少對服務器的請求。

 

2)重定向

請求重定向允許我們將請求從一個地址自動引導到另一個地址,常見的應用場景包括將 HTTP 請求重定向到 HTTPS,或者將舊地址重定向到新地址。

在 Nginx 中,可以使用 return 指令 + 302 狀態碼配置重定向:

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

當用戶訪問某個過期頁面時,會被重定向自動跳轉到新網站。

 

3)URI 重寫

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

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

這樣一來,后端就不用再關注 /api/v1/ 的存在了,這種方法在網站遷移或者結構調整時非常有用。大家也不用去記憶改寫的具體語法,隨用隨查就行。

 


 

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

 

三、Nginx 高級操作 - 暗勁

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

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

  • 熟悉 Nginx 工具和模塊生態,能夠靈活運用 Nginx 進行架構設計、并巧妙地解決各種需求,為大圓滿。

暗勁境界的高手,挑戰大廠開發、架構師、高級系統管理員崗位,不成問題。

 

1、Nginx 高級配置

我們先挑戰小圓滿,Nginx 的配置項實在是太多了,這里我就挑選幾個相對實用的來講解。

1)日志記錄

為了分析網站流量、用戶行為和報錯信息,我們可以開啟 Nginx 日志功能。分為訪問日志和錯誤日志。

訪問日志會記錄所有請求的信息,更全面,可以通過修改 access_log 指令調整日志存儲路徑:

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;  # 指定靜態文件根目錄
     index index.html;  # 默認首頁
  }
}
}

而錯誤日志僅記錄 Nginx 在處理請求時遇到的問題,錯誤又分為 8 個級別:

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

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

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

 

2)訪問控制

如果有惡意用戶攻擊我們的網站,怎么辦?

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

server {
   listen 80;
   server_name localhost;

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

這樣一來,攻擊者就訪問不了網站了!

 

3)限流

為了保護網站,我們還可以使用 Nginx 的限流功能。比如下面這段配置,通過定義請求限流區域并應用于根路徑,限制每個 IP 地址在一分鐘內最多只能發送 2 個請求。

# 定義限流區域,使用客戶端的二進制 IP 地址作為唯一標識
# zone=one:10m 表示創建一個名為 "one" 的內存區域,大小為 10MB
# rate=2r/m 表示每個 IP 地址每分鐘最多允許 2 個請求
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m;

server {
 listen 80;  # 監聽 80 端口,接收 HTTP 請求
 server_name localhost;  # 設置服務器名稱為 localhost

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

   # 將請求轉發到本地的 8080 端口
   proxy_pass http://localhost:8080;  # 反向代理請求到后端服務
}
}

這樣后端服務就不被流量激增影響,能夠提高系統的穩定性。

4)虛擬主機

在企業開發中,我們為了節省成本,經常會在同一臺服務器上部署多個網站項目,這時就需要使用 Nginx 的虛擬主機功能了。

每個網站通常就是一個虛擬主機,會有一個 server_name 名稱對應訪問網站的域名,比如我這里配置 2 臺虛擬主機:

# 虛擬主機1
server {
   listen 80;                           # 監聽 80 端口
   server_name localhost;               # 配置域名為 example.com

   root /tmp/nginx/html;            # 網站根目錄
   index localhost.html;                # 默認首頁
}

# 虛擬主機2
server {
   listen 80;                           # 監聽 80 端口
   server_name 127.0.0.1;               # 配置域名為 another.com

   root /tmp/nginx/html;            # 網站根目錄
   index 127.html;                      # 默認首頁
}

配置虛擬主機后,Nginx 就能夠根據請求的域名找到對應的網站配置,并處理請求。

 

5)其他

除了上面這些,還有很多企業開發中可能會用到的 Nginx 高級配置和技巧。

比如可以:

  • 通過后端響應緩存配置,讓 Nginx 直接從緩存中讀取數據來響應請求,這樣能夠顯著提升性能、減少服務器壓力。

  • 通過正向代理的設置,Nginx 可以作為 “跳板機”,幫客戶端發起請求,從而訪問原本無法直接訪問的資源。

  • 通過自定義錯誤頁面,能夠給用戶提供更友好的錯誤提示信息。

此外,Nginx 支持 WebSocket、HTTPS 和 HTTP/2 等多種協議,還可以配置 Gzip 壓縮來減少傳輸的數據量,進一步優化性能。

最后,Nginx 自身也支持一系列性能調優的配置,比如工作進程與連接數配置,可以從容應對高并發和大流量場景。

worker_processes auto; # 自動檢測 CPU 核心數,設置工作進程數

events {
   worker_connections 2048; # 每個工作進程的最大連接數
}

 

2、Nginx 工具和模塊生態

想成為 Nginx 大圓滿高手,就要懂得利用工具和生態,比如可視化工具、模塊和開源項目。

首先,Nginx 的配置和運維對初學者來說可能比較復雜,這時可以利用 Nginx 官方推出的 Nginx Amplify、輕量級的 Nginx-UI 或者寶塔 Linux 服務器管理面板等可視化工具,通過圖形界面來更直觀地查看配置、分析流量和性能指標,從而提高操作和運維效率。

其次,Nginx 的功能并不是一成不變的,我們可以通過各種各樣的模塊來擴展它的能力,比如我們常用于健康檢查的 nginx_upstream_check_module 模塊、實現 JavaScript 語言擴展的 njs 模塊。

但手動安裝模塊的過程是比較繁瑣的,需要下載源碼并進行編譯。

這種情況下,我們就可以選擇 OpenResty 這樣一個基于 Nginx 的高性能 Web 平臺,它集成了大量模塊、依賴項和 Lua 腳本庫,能夠讓你直接在 Nginx 里開發復雜的業務邏輯,充分利用 Nginx 的非阻塞 I/O 模型來提升應用的性能,適合超高并發的場景。

比如下圖是網上的一個基于 OpenResty 實現的灰度發布架構:


轉自https://www.cnblogs.com/yupi/p/18519885


該文章在 2025/1/20 10:08:47 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲AV午夜精品一区二区三区 | 中文字字幕在线中文乱码不 | 亚洲中文字幕91在线 | 中文字幕亚洲第16页 | 中文字幕永久在线中文免费 | 亚洲熟女乱综合一区二区三区 |