Nginx反向代理與緩存配置方式
實(shí)驗(yàn)環(huán)境

設(shè)置主機(jī)名
hostnamectl set-hostname xxx
一、編譯安裝nginx1.28(lb、web1、web2)
dnf -y install openssl-devel zlib-devel pcre-devel useradd -r -s /bin/false -M nginx
上傳nginx-1.28.0.tar.gz源碼包到/root目錄
tar xf nginx-1.28.0.tar.gz cd nginx-1.28.0/ ./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --with-http_ssl_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_stub_status_module --with-http_addition_module --with-http_random_index_module --with-http_slice_module make -j$(nproc) && make install chown -R nginx:nginx /usr/local/nginx/ ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
創(chuàng)建systemctl管理nginx文件
tee /usr/lib/systemd/system/nginx.service <<EOF [Unit] Description=Nginx server daemon After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecStop=/usr/local/nginx/sbin/nginx -s stop ExecReload=/usr/local/nginx/sbin/nginx -s reload KillMode=process [Install] WantedBy=multi-user.target EOF
啟動(dòng)nginx服務(wù)
systemctl enable --now nginx
二、準(zhǔn)備網(wǎng)頁(yè)
為了更好的測(cè)試,這里網(wǎng)站內(nèi)容不一致,真是生成環(huán)境網(wǎng)站內(nèi)容一樣
web1:
echo '<h1>Welcome to web1!</h1>' > /usr/local/nginx/html/index.html
web2:
- echo '<h1>Welcome to web2!</h1>' > /usr/local/nginx/html/index.html
訪問(wèn)網(wǎng)頁(yè)
使用瀏覽器訪問(wèn)192.168.10.41

使用瀏覽器訪問(wèn)192.168.10.42

三、配置負(fù)載均衡和反向代理(lb)
1、upstream
upstream 是 Nginx 中用于定義后端服務(wù)器組的指令塊,屬于HTTP 核心模塊的一部分。它主要用于反向代理和負(fù)載均衡,允許將客戶端請(qǐng)求分發(fā)到多個(gè)后端服務(wù)器(如 Web 應(yīng)用服務(wù)器、API 服務(wù)、數(shù)據(jù)庫(kù)等)
(1)修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
在http字段中
upstream backend {
server 192.168.10.41;
server 192.168.10.42;
}
proxy_pass http://backend;

(2)重啟nginx服務(wù)
systemctl restart nginx
(3)訪問(wèn)驗(yàn)證
使用瀏覽器訪問(wèn)192.168.10.40

刷新

會(huì)輪詢調(diào)度到每臺(tái)web服務(wù)器中
2、upstream 模塊的后端服務(wù)器參數(shù)
(1)backup
backup專門用于定義備用服務(wù)器,將服務(wù)器標(biāo)記為備用節(jié)點(diǎn)(主節(jié)點(diǎn)不可用時(shí)啟用)。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:

重啟nginx服務(wù)
systemctl restart nginx
驗(yàn)證
使用瀏覽器訪問(wèn)192.168.10.40

只能調(diào)度到web1服務(wù)器
關(guān)閉web1的ngix服務(wù)
systemctl stop nginx
使用瀏覽器再次訪問(wèn)192.168.10.40

因?yàn)閣eb1的nginx服務(wù)已經(jīng)停止,所以被調(diào)度到web2備用服務(wù)器上
測(cè)試完畢后開啟web1的nginx服務(wù)
(2)weight
設(shè)置后端服務(wù)器權(quán)重值(負(fù)載均衡比例)
默認(rèn)權(quán)重 1,不支持小數(shù)(如 weight=1.5 會(huì)報(bào)錯(cuò))
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:

重啟nginx服務(wù)
systemctl restart nginx
訪問(wèn)驗(yàn)證
curl 192.168.10.40

總共訪問(wèn)5次,web1會(huì)處理3次,web2會(huì)處理2次
(3)down
用于手動(dòng)標(biāo)記某臺(tái)服務(wù)器為"停機(jī)維護(hù)"狀態(tài),Nginx 不會(huì)將任何請(qǐng)求轉(zhuǎn)發(fā)給它。不同于 backup(備用服務(wù)器),down 是顯式禁用,通常用于:服務(wù)器維護(hù)期間、故障排查時(shí)隔離問(wèn)題節(jié)點(diǎn)。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:

重啟nginx服務(wù)
systemctl restart nginx
訪問(wèn)驗(yàn)證
使用瀏覽器訪問(wèn)192.168.10.40

只能訪問(wèn)到web1服務(wù)器
(4)max_conns
限制單臺(tái)服務(wù)器的最大并發(fā)連接數(shù),防止過(guò)載。
當(dāng)服務(wù)器的活躍連接數(shù)達(dá)到 max_conns 時(shí),新請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到其他可用服務(wù)器。
默認(rèn)值:0(無(wú)限制)。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:

重啟nginx服務(wù)
systemctl restart nginx
(5)least_conn
使用 least_conn(最少連接數(shù))策略,Nginx 會(huì)將新請(qǐng)求優(yōu)先分配給當(dāng)前活躍連接數(shù)最少的后端服務(wù)器。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:

重啟nginx服務(wù)
systemctl restart nginx
四、Nginx 日志記錄真實(shí)客戶端 IP 地址
(1)開啟日志(web1、web2)
vim /usr/local/nginx/conf/nginx.conf
修改:

$http_x_forwarded_for:為真實(shí)客戶端IP
重啟nginx服務(wù)
systemctl restart nginx
(2)查看訪問(wèn)日志(web1、web2)
tail -f /usr/local/nginx/logs/access.log
輸入命令后使用瀏覽器訪問(wèn)192.168.10.40

$http_x_forwarded_for變量的值為空,用“-”代替
(3)修改配置文件(lb)
vim /usr/local/nginx/conf/nginx.conf
添加:
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 Host $host;
作用:將客戶端請(qǐng)求的原始 Host 頭(域名)傳遞給后端服務(wù)器。
proxy_set_header X-Real-IP $remote_addr;
作用:將客戶端的真實(shí) IP 地址傳遞給后端服務(wù)器,存儲(chǔ)在自定義頭 X-Real-IP 中。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
作用:追加客戶端 IP 到 X-Forwarded-For 頭,用于標(biāo)識(shí)請(qǐng)求鏈路上的所有代理 IP。
重啟nginx服務(wù)
systemctl restart nginx
(4)查看訪問(wèn)日志(web1、web2)
tail -f /usr/local/nginx/logs/access.log
輸入命令后使用瀏覽器訪問(wèn)192.168.10.40

真實(shí)訪問(wèn)IP為192.168.10.1
五、nginx緩存(lb)
(1)修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
proxy_buffering on;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache
levels=1:2
keys_zone=my-cache:100m
inactive=600m
max_size=2g
use_temp_path=off;
proxy_cache my-cache;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key "$scheme://$host$uri$is_args$args";
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_min_uses 3;
proxy_cache_lock on;
重啟nginx服務(wù)
systemctl restart nginx
(2)訪問(wèn)驗(yàn)證
使用瀏覽器訪問(wèn)192.168.10.40

x-cache-status返回“MISS“表示未命中緩存,從后端獲取
刷新超過(guò)三次(觸發(fā)緩存)

x-cache-status返回“HIT “表示響應(yīng)來(lái)自緩存
觀察 X-Cache-Status 的值:
- HIT:響應(yīng)來(lái)自緩存
- MISS:未命中緩存,從后端獲取
- BYPASS:顯式跳過(guò)緩存(如設(shè)置了 proxy_cache_bypass)
- EXPIRED:緩存已過(guò)期
- STALE:后端不可用時(shí)返回舊緩存
當(dāng)看到的網(wǎng)頁(yè)不變時(shí),不是輪詢失效,而是訪問(wèn)請(qǐng)求命中緩存,不在請(qǐng)求后端服務(wù)器。在真實(shí)生成環(huán)境中,網(wǎng)頁(yè)都是一樣的,這里只是為了測(cè)試輪詢效果的展示。
(3)查看生成緩存文件
tree /usr/local/nginx/proxy_cache/

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx反代Ollama接口跨域無(wú)法逐字輸出問(wèn)題詳解
這篇文章主要介紹了在本地部署DeepSeek模型,并通過(guò)Ollama管理,內(nèi)網(wǎng)穿透到公網(wǎng),再使用Nginx反向代理Ollama接口時(shí)遇到的跨域問(wèn)題,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟
這篇文章主要給大家介紹了關(guān)于nginx結(jié)合keepalived實(shí)現(xiàn)高可用的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nginx具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的教程詳解
這篇文章主要為大家詳細(xì)介紹了Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的相關(guān)教程,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
nginx做代理轉(zhuǎn)發(fā)前端請(qǐng)求到后端的代碼示例
Nginx作為反向代理服務(wù)器,可以有效處理請(qǐng)求并轉(zhuǎn)發(fā)到后端服務(wù)器,這篇文章主要介紹了nginx做代理轉(zhuǎn)發(fā)前端請(qǐng)求到后端的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
Nginx訪問(wèn)本地靜態(tài)資源詳細(xì)步驟(推薦)
Nginx?(engine?x)?是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù),這篇文章主要介紹了nginx配置訪問(wèn)本地靜態(tài)資源,需要的朋友可以參考下2022-12-12
Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點(diǎn)相像,都能實(shí)現(xiàn)跳轉(zhuǎn),本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
Nginx配置Prometheus監(jiān)控的實(shí)現(xiàn)
本文主要介紹了Nginx配置Prometheus監(jiān)控的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02

