【web服務_負載均衡Nginx】三、Nginx 實踐應用與高級配置技巧

一、Nginx 在 Web 服務器場景中的深度應用?

1.1 靜態網站部署與優化?

在 CentOS 7 系統中,使用 Nginx 部署靜態網站是最基礎也最常見的應用場景。首先,準備網站文件,在/var/www/html目錄下創建index.html文件:

sudo mkdir -p /var/www/html
sudo echo "<html><body><h1>Welcome to My Static Website</h1></body></html>" > /var/www/html/index.html
sudo chown -R nginx:nginx /var/www/html

上述命令中,mkdir -p用于創建目錄(如果目錄不存在),echo命令生成一個簡單的 HTML 頁面,chown -R修改文件和目錄的所有者為nginx用戶和組,確保 Nginx 有權限訪問。?

接下來,修改 Nginx 的配置文件/etc/nginx/nginx.conf,添加或修改server塊:

server {listen 80;server_name example.com;  # 替換為實際域名location / {root /var/www/html;index index.html;}
}

在這個配置中,listen 80表示 Nginx 監聽 80 端口;server_name指定網站的域名;location /定義了根路徑的處理規則,root指定網站文件的根目錄,index設置默認首頁文件。?

配置完成后,通過以下命令重新加載 Nginx 配置:

sudo nginx -s reload

此時,在瀏覽器中輸入服務器的 IP 地址或域名,即可訪問部署的靜態網站。?

為進一步優化靜態網站性能,可利用 Nginx 的緩存功能。在http塊中添加如下配置:

http {# 其他配置...proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name example.com;location / {root /var/www/html;index index.html;proxy_cache my_cache;proxy_cache_key "$uri$is_args$args";proxy_cache_valid 200 302 60m;proxy_cache_valid 404 10m;}}
}

這里,proxy_cache_path定義了緩存路徑和相關參數,包括緩存層級、緩存區域名稱、最大緩存大小、緩存失效時間等;proxy_cache啟用緩存功能,proxy_cache_key定義緩存鍵,proxy_cache_valid設置不同響應狀態碼的緩存有效期。通過這些配置,Nginx 可以緩存靜態資源,減少后端服務器的負載,提升訪問速度。?

1.2 高并發處理策略?

面對高并發訪問,Nginx 提供了多種策略來保障服務的穩定性和性能。首先,可以調整 Nginx 的工作進程數和連接數限制。在nginx.conf的main塊中,修改worker_processes和worker_connections參數:

worker_processes auto;  # 根據CPU核心數自動設置工作進程數
events {worker_connections 1024;  # 每個工作進程的最大連接數
}

worker_processes auto會自動檢測服務器的 CPU 核心數來設置合適的工作進程數,充分利用服務器資源;worker_connections則限制了每個工作進程能夠處理的最大連接數。?

其次,配置限流功能可以有效防止惡意請求或突發流量對網站造成沖擊。Nginx 的limit_req_zone模塊提供了基于漏桶算法的限流功能。在http塊中添加如下配置:

http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {listen 80;server_name example.com;location / {limit_req zone=mylimit;# 其他配置...}}
}

limit_req_zone定義了限流區域,$binary_remote_addr表示基于客戶端 IP 地址進行限流,zone=mylimit:10m指定限流區域名稱和大小,rate=10r/s設置限流速率為每秒 10 個請求。在location塊中應用limit_req指令啟用限流功能。

二、Nginx 在 API 網關場景中的應用?

2.1 API 網關概念與作用?

API 網關是微服務架構中的重要組件,它作為系統的統一入口,負責接收所有客戶端對系統內 API 的請求,并進行統一的管理和分發。API 網關的主要功能包括請求路由、認證授權、流量控制、監控統計等。Nginx 通過靈活的配置和豐富的模塊擴展能力,可以實現 API 網關的多種功能。?

2.2 Nginx 作為 API 網關的配置與實踐?

假設我們有一個微服務架構,包含用戶服務(部署在192.168.1.110:8080)和訂單服務(部署在192.168.1.111:8081),需要通過 Nginx 作為 API 網關將不同的 API 請求轉發到對應的服務。在nginx.conf中添加如下配置:

http {upstream user_service {server 192.168.1.110:8080;}upstream order_service {server 192.168.1.111:8081;}server {listen 80;server_name api.example.com;  # 替換為實際API域名location /user/ {proxy_pass http://user_service;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /order/ {proxy_pass http://order_service;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

在這個配置中,通過upstream分別定義了用戶服務和訂單服務的后端服務器地址;在server塊中,根據請求 URL 的前綴(/user/和/order/),將請求分別轉發到對應的服務,并設置了相關的請求頭信息,以便后端服務獲取客戶端的真實 IP 等信息。?

為了實現認證授權功能,我們可以使用 Nginx 的 Lua 模塊結合 JWT(JSON Web Token)進行身份驗證。首先,安裝 Nginx 的 Lua 模塊(編譯 Nginx 時添加--with - lua選項),然后在location塊中添加如下 Lua 腳本:

location /user/ {content_by_lua 'local ngx = require "ngx"local jwt = require "resty.jwt"local token = ngx.req.get_headers()["Authorization"]if token thenlocal res, err = jwt.verify(token, "your_secret_key", {verify_exp = true})if res thenngx.exec("@user_service");elsengx.status = 401ngx.say("Unauthorized")endelsengx.status = 401ngx.say("Unauthorized")end';location @user_service {proxy_pass http://user_service;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

上述 Lua 腳本從請求頭中獲取Authorization字段的 JWT 令牌,驗證令牌的有效性和過期時間,如果驗證通過則將請求轉發到后端服務,否則返回 401 未授權錯誤。?

三、Nginx 高級配置技巧?

3.1 SSL/TLS 配置?

隨著網絡安全的重要性日益凸顯,為網站配置 SSL/TLS 證書實現 HTTPS 訪問已成為標配。首先,從證書頒發機構(如 Let's Encrypt)申請 SSL 證書,獲取證書文件(通常為.crt文件)和私鑰文件(.key文件)。?

然后,在nginx.conf中添加如下配置:

server {listen 443 ssl;server_name example.com;  # 替換為實際域名ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location / {root /var/www/html;index index.html;}
}

listen 443 ssl表示監聽 443 端口并啟用 SSL;ssl_certificate和ssl_certificate_key指定證書文件和私鑰文件的路徑;ssl_protocols設置支持的 SSL 協議版本,ssl_ciphers設置加密算法。配置完成后,重新加載 Nginx 配置,網站即可通過 HTTPS 安全訪問。?

3.2 日志管理與分析?

Nginx 的日志管理功能可以幫助我們了解用戶訪問行為、排查故障。在nginx.conf中,可以自定義日志格式和存放路徑。例如,定義一個詳細的日志格式:

http {log_format detailed '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" ''$request_time';access_log /var/log/nginx/access.log detailed;
}

log_format定義了名為detailed的日志格式,包含客戶端 IP、用戶、請求時間、請求內容、響應狀態碼、響應大小、來源頁面、用戶代理、轉發 IP、請求處理時間等信息;access_log指定訪問日志的存放路徑和使用的日志格式。?

為了更方便地分析日志,可以使用 AWStats、GoAccess 等工具。以 GoAccess 為例,首先安裝 GoAccess:

sudo yum install goaccess

然后,生成日志分析報告:

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED

上述命令將生成一個 HTML 格式的日志分析報告,包含訪問統計、熱門頁面、用戶 IP 分布等信息,可在瀏覽器中查看。?

3.3 動態模塊加載與擴展?

Nginx 支持動態加載模塊,通過安裝第三方模塊可以擴展其功能。以安裝 Nginx 的ngx_http_image_filter_module模塊為例,用于對圖片進行實時處理(如縮放、裁剪)。?

首先,下載模塊源碼:

git clone https://github.com/openresty/ngx_http_image_filter_module.git

然后,重新編譯 Nginx 并添加模塊:

cd nginx-1.23.3
./configure \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--add - module=/path/to/ngx_http_image_filter_module
make && sudo make install

編譯完成后,在nginx.conf中配置模塊:

http {# 其他配置...location /image/ {image_filter resize 300 200;  # 示例:將圖片縮放為300x200root /var/www/html;}
}

上述配置在/image/路徑下啟用圖片處理功能,將請求的圖片進行縮放操作。?

本篇文章圍繞 Nginx 在 CentOS 7 環境下的實踐應用與高級配置技巧展開了全面深入的探討,涵蓋了 Web 服務器場景、API 網關場景以及多種高級配置功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902107.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言格式化輸入輸出總結 (printf和scanf)

一、printf格式化輸出 1. 整數格式化 (%d, %i, %u, %o, %x) c復制代碼 int num 42; // 以下為不同格式輸出示例 printf("%d", num); // 42 (十進制) printf("%i", num); // 42 (同%d) printf("%u", num); // 42 (無符號十進制…

哈夫曼編碼和哈夫曼樹

哈夫曼編碼&#xff08;Huffman Coding&#xff09; 是一種基于字符出現頻率的無損數據壓縮算法&#xff0c;通過構建哈夫曼樹&#xff08;Huffman Tree&#xff09; 來生成最優前綴編碼&#xff0c;使得高頻字符用短編碼&#xff0c;低頻字符用長編碼&#xff0c;從而實現高效…

Jetson Orin NX 部署YOLOv12筆記

步驟一.創建虛擬環境 conda create -n yolov12 python3.8.20 注意&#xff1a;YOLOv12/YOLOv11/YOLOv10/YOLOv9/YOLOv8/YOLOv7a/YOLOv5 環境通用 步驟二.激活虛擬環境 conda activate yolov12 #激活環境 步驟三.查詢Jetpack出廠版本 Jetson系列平臺各型號支持的最高Jetp…

Linux指令篇 (2)

指令篇&#xff08;2&#xff09; Linux基本指令&#xff08;2&#xff09;(1) mkdir指令&#xff08;重要&#xff09;&#xff08;2&#xff09;rmdir指令&&rm指令(重要)&#xff08;3&#xff09;man指令(重要)&#xff08;4&#xff09;cp指令&#xff08;重要&…

致遠OA——自定義開發rest接口

文章目錄 :apple: 業務流程 &#x1f34e; 業務流程 代碼案例&#xff1a; https://pan.quark.cn/s/57fa808c823f 官方文檔&#xff1a; https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登錄系統 —— 后臺管理 —— 切換系…

區塊鏈如何成為智能城市的底層引擎?從數據透明到自動化治理

區塊鏈如何成為智能城市的底層引擎&#xff1f;從數據透明到自動化治理 引言&#xff1a;智能城市真的智能嗎&#xff1f; 在數字化時代&#xff0c;智能城市&#xff08;Smart City&#xff09;逐步成為各國推動城市創新的重要方向。城市管理者希望借助物聯網&#xff08;IoT…

洛谷P1177【模板】排序:十種排序算法全解(1)

扯談 之前我已經把十大排序算法全講了一遍&#xff08;具體詳見專欄C排序算法&#xff09;,今天我們來用一道簡單的題目總結實戰一下。 算法實現 一、桶排序&#xff08;Bucket Sort&#xff09; ?適用場景?&#xff1a;數據范圍已知且較小&#xff08;需根據測試數據調整…

SuperMap iClient3D for WebGL 如何加載WMTS服務

在 SuperMap iClient3D for WebGL 中加載WMTS服務時&#xff0c;參數配置很關鍵&#xff01;下面我們詳細介紹如何正確填寫參數&#xff0c;確保影像服務完美加載。 一、數據制作 對于上述視頻中的地圖制作&#xff0c;此處不做講述&#xff0c;如有需要可訪問&#xff1a;Onl…

再讀bert(Bidirectional Encoder Representations from Transformers)

再讀 BERT&#xff0c;仿佛在數字叢林中邂逅一位古老而智慧的先知。初次相見時&#xff0c;驚嘆于它以 Transformer 架構為羅盤&#xff0c;在預訓練與微調的星河中精準導航&#xff0c;打破 NLP 領域長久以來的迷霧。而如今&#xff0c;書頁間躍動的不再僅是 Attention 機制精…

從零開始 保姆級教程 Ubuntu20.04系統安裝MySQL8、服務器配置MySQL主從復制、本地navicat遠程連接服務器數據庫

從零開始&#xff1a;Ubuntu 20.04 系統安裝 MySQL 8、服務器配置 MySQL 主從復制、本地 Navicat 遠程連接服務器數據庫 初始化服務器1. 更新本地軟件包列表2. 安裝 MySQL 服務器3. 查看 MySQL 安裝版本4. 登錄 MySQL 管理終端5. 設置 root 用戶密碼&#xff08;推薦使用 nativ…

java怎么完善注冊,如果郵箱中途更換,能否判斷

解析在下面 附贈代碼 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存儲驗證碼&#xff08;郵箱 -> 驗證碼信息&#xff09;(保證線程安全) 以免中途更改郵箱pri…

n8n 中文系列教程_01. 簡單易懂的現代AI魔法,n8n的快速了解與概念科普(文末有彩蛋)

1. 教程簡介 歡迎來到“無代碼工具探索”課程&#xff0c;這是專為非技術人員設計的指南&#xff08;當然&#xff0c;技術人員也可以從中受益&#xff09;。我們的目標是通過無代碼工具來提升工作效率&#xff0c;尤其是利用像 n8n 這樣的靈活數據庫平臺。這些工具被譽為“現…

解碼 Web Service:從技術原理到應用場景的深度剖析

Web Service 是一種基于網絡的、分布式的計算技術&#xff0c;它允許不同的應用程序之間通過網絡進行通信和交互。以下是關于 Web Service 的詳細介紹&#xff1a; 一、定義與概念 Web Service 是一種可以通過 Web 協議&#xff08;如 HTTP&#xff09;進行訪問的軟件組件&am…

Nacos啟動報錯

Nacos啟動是在單機模式下&#xff0c;不是集群模式 點擊startup.cmd啟動會報錯 打開bin目錄 rem是注釋的意思&#xff0c;在nacos1.3.2之后&#xff0c;nacos默認的都是集群模式&#xff0c;我們這里單機測試就是用單機模式。 也可以修改MODE&#xff0c;如果選擇不修改&…

uniapp-商城-26-vuex 使用流程

為了能在所有的頁面都實現狀態管理&#xff0c;我們按照前面講的頁面進行狀態獲取&#xff0c;然后再進行頁面設置和布局&#xff0c;那就是重復工作&#xff0c;vuex 就會解決這樣的問題&#xff0c;如同類、高度提煉的接口來幫助我們實現這些重復工作的管理。避免一直在造一樣…

Git 命令速查手冊

聽說用美圖可以釣讀者&#xff1f; 一、基礎操作核心命令 1. 倉庫初始化與克隆 命令作用示例git init創建新倉庫git init my-projectgit clone克隆遠程倉庫git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add關聯遠程倉庫git re…

信息量、香農熵、交叉熵、KL散度總結

信息量 對于一個事件而言&#xff0c;它一般具有三個特征&#xff1a; 小概率事件往往具有較大的信息量 大概率事件往往具有較小的信息量 獨立事件的信息量相互可以相加 比如我們在買彩票這個事件中&#xff0c;彩票未中獎的概率往往很高&#xff0c;對我們而言一點也不稀…

使用C語言的cJSON中給JSON字符串添加轉義

在 cJSON 庫中&#xff0c;沒有直接提供 一個函數來專門給 JSON 字符串添加轉義&#xff08;如將 " 轉義為 \"&#xff0c;\n 轉義為 \\n 等&#xff09;。 但 cJSON 在 序列化&#xff08;cJSON_Print 或 cJSON_PrintUnformatted&#xff09; 時會自動處理轉義字符…

宇樹機器狗go2—slam建圖(1)點云格式

0.前言 上一篇番外文章教大家如何在宇樹機器狗go2的gazebo仿真環境中實現簡單的導航運動&#xff0c;本期文章會教大家如何讓宇樹的機器狗go2在仿真環境中進行slam建圖時經常會遇到的一些點云格式&#xff0c;在后續的slam建圖和slam算法解析的時候會經常與這些點云信息打交道…

linux socket編程之udp(實現客戶端和服務端消息的發送和接收)

目錄 一.創建socket套接字(服務器端) 二.bind將prot與端口號進行綁定(服務器端) 2.1填充sockaddr_in結構 2.2bind綁定端口 三.直接通信(服務器端) 3.1接收客戶端發送的消息 3.2給客戶端發送消息 四.客戶端通信 4.1創建socket套接字 4.2客戶端bind問題 4.3直接通信即可…