Nginx反向代理與緩存配置方式
實驗環(huán)境
設置主機名
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
啟動nginx服務
systemctl enable --now nginx
二、準備網(wǎng)頁
為了更好的測試,這里網(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ǎng)頁
使用瀏覽器訪問192.168.10.41
使用瀏覽器訪問192.168.10.42
三、配置負載均衡和反向代理(lb)
1、upstream
upstream 是 Nginx 中用于定義后端服務器組的指令塊,屬于HTTP 核心模塊的一部分。它主要用于反向代理和負載均衡,允許將客戶端請求分發(fā)到多個后端服務器(如 Web 應用服務器、API 服務、數(shù)據(jù)庫等)
(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服務
systemctl restart nginx
(3)訪問驗證
使用瀏覽器訪問192.168.10.40
刷新
會輪詢調(diào)度到每臺web服務器中
2、upstream 模塊的后端服務器參數(shù)
(1)backup
backup專門用于定義備用服務器,將服務器標記為備用節(jié)點(主節(jié)點不可用時啟用)。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
重啟nginx服務
systemctl restart nginx
驗證
使用瀏覽器訪問192.168.10.40
只能調(diào)度到web1服務器
關閉web1的ngix服務
systemctl stop nginx
使用瀏覽器再次訪問192.168.10.40
因為web1的nginx服務已經(jīng)停止,所以被調(diào)度到web2備用服務器上
測試完畢后開啟web1的nginx服務
(2)weight
設置后端服務器權重值(負載均衡比例)
默認權重 1,不支持小數(shù)(如 weight=1.5 會報錯)
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
重啟nginx服務
systemctl restart nginx
訪問驗證
curl 192.168.10.40
總共訪問5次,web1會處理3次,web2會處理2次
(3)down
用于手動標記某臺服務器為"停機維護"狀態(tài),Nginx 不會將任何請求轉發(fā)給它。不同于 backup(備用服務器),down 是顯式禁用,通常用于:服務器維護期間、故障排查時隔離問題節(jié)點。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
重啟nginx服務
systemctl restart nginx
訪問驗證
使用瀏覽器訪問192.168.10.40
只能訪問到web1服務器
(4)max_conns
限制單臺服務器的最大并發(fā)連接數(shù),防止過載。
當服務器的活躍連接數(shù)達到 max_conns 時,新請求會被轉發(fā)到其他可用服務器。
默認值:0(無限制)。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
重啟nginx服務
systemctl restart nginx
(5)least_conn
使用 least_conn(最少連接數(shù))策略,Nginx 會將新請求優(yōu)先分配給當前活躍連接數(shù)最少的后端服務器。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
添加:
重啟nginx服務
systemctl restart nginx
四、Nginx 日志記錄真實客戶端 IP 地址
(1)開啟日志(web1、web2)
vim /usr/local/nginx/conf/nginx.conf
修改:
$http_x_forwarded_for:為真實客戶端IP
重啟nginx服務
systemctl restart nginx
(2)查看訪問日志(web1、web2)
tail -f /usr/local/nginx/logs/access.log
輸入命令后使用瀏覽器訪問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;
作用:將客戶端請求的原始 Host 頭(域名)傳遞給后端服務器。
proxy_set_header X-Real-IP $remote_addr;
作用:將客戶端的真實 IP 地址傳遞給后端服務器,存儲在自定義頭 X-Real-IP 中。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
作用:追加客戶端 IP 到 X-Forwarded-For 頭,用于標識請求鏈路上的所有代理 IP。
重啟nginx服務
systemctl restart nginx
(4)查看訪問日志(web1、web2)
tail -f /usr/local/nginx/logs/access.log
輸入命令后使用瀏覽器訪問192.168.10.40
真實訪問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服務
systemctl restart nginx
(2)訪問驗證
使用瀏覽器訪問192.168.10.40
x-cache-status返回“MISS“表示未命中緩存,從后端獲取
刷新超過三次(觸發(fā)緩存)
x-cache-status返回“HIT “表示響應來自緩存
觀察 X-Cache-Status 的值:
- HIT:響應來自緩存
- MISS:未命中緩存,從后端獲取
- BYPASS:顯式跳過緩存(如設置了 proxy_cache_bypass)
- EXPIRED:緩存已過期
- STALE:后端不可用時返回舊緩存
當看到的網(wǎng)頁不變時,不是輪詢失效,而是訪問請求命中緩存,不在請求后端服務器。在真實生成環(huán)境中,網(wǎng)頁都是一樣的,這里只是為了測試輪詢效果的展示。
(3)查看生成緩存文件
tree /usr/local/nginx/proxy_cache/
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
nginx結合keepalived實現(xiàn)高可用的完整步驟
這篇文章主要給大家介紹了關于nginx結合keepalived實現(xiàn)高可用的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-12-12Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點相像,都能實現(xiàn)跳轉,本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-08-08Nginx配置Prometheus監(jiān)控的實現(xiàn)
本文主要介紹了Nginx配置Prometheus監(jiān)控的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-02-02