day45-nginx復雜跳轉與https

1. ?nginx復雜跳轉

  • 客戶端ip不是內網(172.16/192.168)ip時,維護文件存在時,返回503或者錯誤頁面

1.1. 📝修改配置文件

server {listen 80;server_name re.linux.cn; root /app/code/re/;set $flag 0;if (  $remote_addr  !~*  "^172.16|^192.168" ) {set $flag 1;}if ( -f /etc/nginx/weihu.txt  ) {set $flag  ${flag}1;  }if ( $flag = 11 ) {return 503;#return 302 http://re.oldboy.cn/error.html;}if ( $request_method  !~*  "GET|POST|HEAD" ) {return 405;}location / {index index.html;}
}

1.2. 📁創建維護文件

touch /etc/nginx/weihu.txt

1.3. 🔄重啟服務

nginx -t
systemctl reload nginx

1.4. 🌏使用10網段訪問

2. ?nginx中的case語句

  • map類似shell中的case語句
  • 問題:配置nginx負載均衡監控檢查功能check,后端web節點會產生大量的檢查日志(訪問日志)
  • 解決:web服務器上配置根據不同的UA進行判斷
    • 如果UA是lb_check則不記錄訪問日志
    • 如果UA是其他的則記錄訪問日志
  • map做判斷,access_log有個if選項
access_log /var/log/nginx/lb_access.log main if=0或1; 0不記錄

2.1. 📌map用法

map $源變量 $目標變量 {default     值;條件1       值1;條件2       值2;...
}
  • map 必須寫在 http 塊中。
  • $源變量 可以是任何內置變量或之前定義的變量(如 $host, $http_user_agent, $request_method 等)。
  • $目標變量 是你自定義的新變量名。
  • default 表示默認值,當沒有匹配時使用。

2.2. 📝修改配置文件

  • 判斷UA
map $http_user_agent $log {"~*lb_check|curl|wget" 0;default                1;
}server {listen 80;server_name lb.linux.cn;root /app/code/lb/;access_log /var/log/nginx/lb-access.log  main if=$log;error_log /var/log/nginx/lb-error.log   notice;location / {index index.html;}
}

2.3. 🔄重啟服務

nginx -t
systemctl reload nginx

2.4. 🔍測試

1.web02上測試
curl -A lb_check -H Host:lb.oldboy.cn http://10.0.0.7
curl -A lb -H Host:lb.oldboy.cn http://10.0.0.72.web01上查看日志
tail -f /var/log/nginx/lb-access.log

3. ?rewrite

  • 功能與return類似

在 Nginx 中,returnrewrite 都可以用于實現URL 重定向或跳轉,但它們的功能、行為和適用場景完全不同。下面詳細對比它們的區別:

3.1. 🧩基本概念

特性

return

rewrite

類型

控制流指令

URL 重寫指令

是否發送 HTTP 響應

是(直接返回響應)

否(修改請求后繼續處理)

主要用途

立即返回狀態碼或跳轉到新地址

修改 URL 路徑,內部跳轉或外部重定向

支持的狀態碼

支持所有標準 HTTP 狀態碼(如 200, 301, 302, 403, 404 等)

僅支持 301、302、303、307、308 的跳轉

3.2. 📌 用法詳解與示例

3.2.1. 🔹 return:立即返回指定的 HTTP 響應

3.2.1.1. 語法:

return [狀態碼] [重定向地址];

3.2.1.2. 示例 1:返回錯誤頁面

location /error {return 404;
}

3.2.1.3. 示例 2:301 永久重定向

location = /old-page {return 301 https://example.com/new-page;
}

3.2.1.4. 示例 3:直接返回字符串內容(常用于調試)

location /hello {return 200 "Hello World!";
}

3.2.1.5. 實例 4:return + 變量

server {listen 80;server_name baidu.linux.cn;return 301 http://www.baidu.cn$request_uri;
}

?? 注意:return 一旦執行,Nginx 就不會再處理后續的邏輯,而是立即返回響應

3.2.2. 🔹 rewrite:重寫 URL,控制請求路徑

3.2.2.1. 語法:

rewrite 正則表達式 替換內容 [flag];
  • 支持正則匹配
  • 可以配合 break, last, redirect, permanent 等 flag 使用

rewrite標記(flag)

redirect

302臨時跳轉,新舊地址都可以用

permanent

301永久跳轉,舊地址SEO排名取消,只用新地址

break

類似exit,后面還有其他的可以匹配location不會繼續匹配

last

類似continue結束當前匹配,進行下個location匹配

3.2.2.2. 示例 1:內部重寫(不改變瀏覽器地址)

rewrite ^/user/(\d+)$ /profile.php?id=$1 break;
  • 瀏覽器看到的是 /user/123,服務器實際處理的是 /profile.php?id=123

3.2.2.3. 示例 2:302 臨時重定向

rewrite ^/old-path$ /new-path redirect;
  • 返回 302,瀏覽器地址欄會變成 /new-path

3.2.2.4. 示例 3:301 永久重定向

rewrite ^/old-blog/(.*)$ https://blog.example.com/$1 permanent;
  • 返回 301,適合 SEO 權重轉移

3.3. 🧠 核心區別總結

對比項

return

rewrite

是否中斷請求處理

? 是,立即返回響應

? 否,繼續處理新的 URL

是否可帶響應體

? 可以自定義內容

? 不行,只能跳轉或改寫 URL

是否支持正則

? 不支持

? 支持

是否可用于 URL 重寫

? 不可做內部重寫

? 可以做內部重寫

是否更高效

? 更快,因為不繼續處理

? 相對慢一點(需要重新匹配 location)

3.4. 💡 使用建議

場景

推薦使用

需要立即返回錯誤或內容

return

需要做復雜的 URL 匹配和重寫

rewrite

做 SEO 友好的永久跳轉

return 301rewrite ... permanent

臨時跳轉測試

return 302rewrite ... redirect

內部路徑映射(瀏覽器地址不變)

rewrite + break

3.5. 🔍 綜合對比示例

配置

行為

return 301 https://example.com;

立即返回 301,瀏覽器跳轉

rewrite ^/old$ /new redirect;

返回 302,跳轉到 /new

rewrite ^/old$ /new break;

不跳轉,內部將 /old 映射為 /new 處理

return 403;

立即返回 403 錯誤

rewrite ^/api/(.*)$ /v2/api/$1 break;

內部重寫 API 路徑,瀏覽器無感知

4. ?https(數字證書)

  • https == http over tls進行你加密
  • 網站,申請https證書文件.(公鑰(證書),私鑰)
  • 對外:一般申請/購買使用(網站,app,小程序)
  • 對內:自己創建

4.1. ??申請證書方式

  • 通過命令創建(自建證書),其他人訪問,提示網站不安全.
  • 申請免費證書(有效期是3個月);阿里云,Let's Encrypt
  • 正式:購買
  • 證書根據加密與安全方式分類

4.2. 🌏阿里云上申請ssl證書

4.2.1. 在數字證書管理服務中選擇ssl證書管理,點擊立即購買

4.2.2. 選擇個人測試證書,點擊立即購買

4.2.3. 支付

4.2.4. 登錄管理控制臺

4.2.5. 創建證書

4.2.6. 輸入域名,選擇快速簽發,提交審核

4.2.7. 審核通過后選擇證書下載到電腦上

4.3. 🚀部署ssl證書

4.3.1. 將ssl證書存放到/etc/nginx/keys/目錄下

4.3.2. 修改nginx配置文件

server {listen 80;server_name www.zhubl.xyz;return 302 https://www.zhubl.xyz$request_uri;access_log off;
}
server {listen 443 ssl http2;server_name www.zhubl.xyz   ;ssl_certificate     /etc/nginx/keys/zhubl.xyz.pem;ssl_certificate_key /etc/nginx/keys/zhubl.xyz.key;root /app/code/ssl/;location / {index index.html;}
}

4.3.3. 重啟nginx服務

#檢查配置文件
nginx -t#重啟
systemctl reload nginx#檢查端口
ss -lntup | grep nginx

4.3.4. 瀏覽器訪問

http://www.zhubl.xyz
自動跳轉
https://www.zhubl.xyz

4.4. 🔍監控

  • https證書是否過期,30天
#1.獲取過期日期,轉換為秒 
date_expire=`curl -s -v -o /dev/null https://www.jd.com|& grep 'expire date'|awk -F: '{print $2}'` 
date_expire_seconds=`date +%s -d "$date_expire"`
date_now_seconds=`date +%s`
days_left=`echo "($date_expire_seconds - $date_now_seconds )/86400 "|bc `

4.5. 🌈自建證書

#創建私鑰 私鑰server.key 
openssl genrsa -idea -out server.key 2048 #根據私鑰創建 證書 server.crt .pem證書 
openssl req -days 36500 -x509 -sha256 - nodes -newkey rsa:2048 -keyout server.key - out server.crt

5. ?nginx配置優化

server {listen 443 ssl;keepalive_timeout 70;#指定ssl加密協議的版本 不要 加上TLSv1.0不安全. ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;#加密算法. 需要排除不安全的算法#排除null空算法, md5算法 ssl_ciphers AES128- SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4- MD5:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5;ssl_certificate /usr/local/nginx/conf/cert.pem;ssl_certificate_key /usr/local/nginx/conf/cert.key;#設置https 會話緩存 10MB大小的空間用于 存儲緩存. ssl_session_cache shared:SSL:10m;#超時時間 10分鐘ssl_session_timeout 10m;
}

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

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

相關文章

基于pcl點云庫實現激光雷達數據采集

基于pcl點云庫實現倍加福R2000激光雷達數據采集 一、項目介紹二、開發詳情三、顯示效果展示四、說明 一、項目介紹 最近用pcl庫實現了倍加福R2000激光雷達的數據采集,并實時在viewer上實時更新顯示。軟件的開發是基于vs2019qt插件pcl庫實現,可以完成如下…

微信小程序61~70

1.組件wxml的slot-插槽 在使用基礎組件時,可以在組件中間寫子節點,從而將子節點內容展示到頁面中,自定義組件也可以接收子節點但是要在組件模板中定義節點,承載組件中間的子節點需要使用多個插槽時,要在組件.js中聲明…

03_性能優化:讓軟件呼吸更順暢

引言 在用戶對軟件響應速度近乎苛刻的今天,性能已成為產品競爭力的核心指標。據Google研究,頁面加載時間每增加1秒,轉化率就會下降20%。本文將從前端、后端、移動端三個維度,揭示性能優化的核心策略與實戰技巧,幫助你打…

LangChain4j 框架模仿豆包實現智能對話系統:架構與功能詳解

系統整體架構設計基于 LangChain4j 框架構建的智能對話系統采用 "前后端分離 大模型中樞" 的三層架構設計,實現了與豆包類似的智能交互體驗。系統架構圖如下所示:┌────────────────────────────────────…

基于uni-app的書法學習管理小程序的設計與實現

一、設計的目的 書法是中華民族傳統文化的瑰寶,更是人類文明的寶貴財富,具有深遠的意義和實價值。在當今數字化時代,隨著信息技術的飛速發展,傳統書法學習模式面臨著諸多挑戰和需要解決的問題。為推動書法學習的現代化轉型&#…

NumPy 函數庫在數學建模中的基本使用方法

一、引言 在數學建模的世界里,我們常常需要處理大量的數據和進行復雜的數值計算。Python 中的 NumPy 庫就像是一位得力的助手,它為我們提供了強大的多維數組對象和豐富的數學函數,讓我們能夠高效地完成各種數值計算任務。接下來,我們將深入探討 NumPy 在數學建模中的基本使…

模塊三:現代C++工程實踐(4篇)第一篇《C++模塊化開發:從Header-only到CMake模塊化》

引言:現代C工程化的核心挑戰(終極擴展版) 在云計算與物聯網時代,C項目規模呈指數級增長。傳統Header-only開發模式暴露出編譯效率低下、依賴管理混亂、版本沖突頻發等致命問題。本文通過CMake 3.22Conan 2.0工具鏈的深度集成&…

uniapp啟動圖被拉伸問題

記錄下: 安卓手機有不同的規格,很難所有規格都去適配。如果不適配所有機型,那么就會導致部分機型的啟動圖被拉伸。 安卓提供了.9.png圖片格式,允許標注部分拉伸,這樣啟動圖中間的logo就不會被拉伸。 下面2張圖是沒有…

stm32的三種開發方式

以下是針對STM32F103RC實現LED閃爍(PC13引腳)的三種開發方式示例代碼,每種方式均保持相同的核心邏輯: 1. 寄存器開發方式(直接操作寄存器) #include "stm32f10x.h"int main(void) {// 1. 開啟G…

SpringBoot問卷調查系統設計與實現

概述 基于SpringBoot開發的問卷調查系統,該系統集成了問卷管理、題目管理等多種功能模塊。 主要內容 核心功能模塊: ??個人信息管理??: 修改密碼個人信息修改 ??問卷管理??: 問卷新增問卷修改問卷刪除 ??題目管理?…

Linux進程管理:從基礎到實戰

在 Linux 系統編程中,進程(Process) 是操作系統進行資源分配和調度的基本單位。理解進程的概念是掌握系統編程、多任務處理、并發編程的基礎。 目錄 一、什么是進程? 定義: 二、進程的生命周期 示例:查…

工業物聯網中的 Modbus:傳感器與網關通信實戰(二)

四、實戰案例解析 4.1 項目背景與目標 某智能工廠致力于提升生產過程的自動化和智能化水平,對生產線上的各種設備進行實時監控和數據分析。在該工廠的一個生產車間中,存在著大量的傳感器,用于監測設備的運行狀態、環境參數等信息。這些傳感…

飛算 JavaAI 智控引擎:全鏈路開發自動化新圖景

免責聲明: 此文章的所有內容皆是本人實驗測評,并非廣告推廣,并非抄襲。如有侵權,請聯系,謝謝! 文章目錄📝前言一、飛算 Java AI 智能開發助手簡介1.1何為飛算 Java AI智能助手?2.2 飛算Java AI 直擊開發全場…

MYSQL數據庫(九)MVCC-多版本并發控制

目錄 一 前景導入 1 當前讀 2 快照讀 二 MVCC 1 隱藏字段 2 UndoLog 回滾日志 (1 UndoLog日志 (2 UndoLog版本鏈 3 Read View 面試八股 介紹一下MVCC 一 前景導入 1 當前讀 可使當前事務讀取的是最新版本的數據,讀取時還要保證其他并發事務不能修改當中…

[Pytest] [Part 2]增加 log功能

開始實現需求之前先做個log類,可以給其他模塊使用,也方便以后修改log類的功能和屬性。 使用的是python中的logging包來進行簡單的封裝,具體代碼如下 import logging import sysclass TefLogger:def __init__(self, logger_nameTEST_FRAMEWOR…

NeighborGeo:基于鄰居的IP地理定位(三)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 3. NeighborGeo 本文提出NeighborGeo,利用圖結構學習和有監督對比學習來建立可靠的地標-目標關…

python使用fastmcp包編寫mcp服務端(mcp_server)和mcp客戶端(mcp_client)

安裝fastmcp pip install fastmcp編寫mcp服務端代碼 from fastmcp import FastMCP mcp FastMCP(weather)mcp.tool() def get_weather(city: str):獲取對應城市的天氣:param city: 目標城市:return: 該城市的天氣return f"{city}天氣晴朗,溫度60度&#xff01…

(1)機器學習小白入門 YOLOv:從概念到實踐

(1)機器學習小白入門YOLOv :從概念到實踐 (2)機器學習小白入門 YOLOv:從模塊優化到工程部署 (3)機器學習小白入門 YOLOv: 解鎖圖片分類新技能 目標檢測一直是一個機器學習的一個重要的應用方向。而 YOLOv(You Only Look Once&…

Appium 簡介

Appium 是一個開源的移動應用自動化測試框架,用于測試原生應用(native)、混合應用(hybrid)和移動網頁應用(mobile web)。它支持 iOS、Android 和 Windows 平臺。 https://www.bilibili.com/video/BV1R93szkEhi/? App自動化測試:App測試AppiumUiAutomato…

【C語言刷題】第十一天:加量加餐繼續,代碼題訓練,融會貫通IO模式

🔥個人主頁:艾莉絲努力練劍 ?專欄傳送門:《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 🍉學習方向:C/C方向 ??人生格言:為天地立心,為生民立命,為…