Linux:Nginx服務重寫功能

目錄

一、重寫功能

1.重寫功能作用

2.rewrite指令

? ?if指令

? ?return指令

? ?set指令

? ?break指令

3.rewrite標志

? ?redirect標志

? ?permanent標志

? ?break標志

? ?last標志

? ?rewrite標志實驗


一、重寫功能

1.重寫功能作用

??重寫功能(rewrite)用于實現URL的重寫,URL的重寫是非常有用的功能,比如它可以在我們改變網站結構之后,不需要客戶端修改原來的書簽,也無需其他網站修改我們的鏈接,就可以設置為訪問,另外還可以在一定程度上提高網站的安全性。

2.rewrite指令

? ?if指令

? ? ? ? 用于條件匹配判斷,并根據條件判斷結果選擇不同的Nginx配置,可以配置在server或location塊中進行配置,Nginx的if語法僅能使用if做單次判斷可以在server模塊和location模塊,不支持使用if else或者if elif這樣的多重判斷,用法如下:

?if ( ? [連接符] ? 條件匹配 ?){

執行動作;

}

條件匹配連接符:

= 比較變量和字符串是否相等,相等為true。

!= 比較變量和字符串是否不相等,不相等為true。

~ 區分大小寫,判斷字符是否匹配,匹配為true。

~* 不區分大小寫,判斷字符是否匹配,匹配為true。

-f 和 !-f #判斷請求的文件是否存在和是否不存在。

-d 和 !-d #判斷請求的目錄是否存在和是否不存在。

-x 和 !-x #判斷文件是否可執行和是否不可執行。

-e 和 !-e #判斷請求的文件或目錄是否存在和是否不存在(包括文件,目錄,軟鏈接) 。

舉例:
location /main {index index.html;default_type text/html;
#定義文件類型if ( $scheme = http ){
#如果用戶訪問的協議是http,$scheme變量表示用戶來訪問使用的協議。       echo "if-----> $scheme";
#則輸出if --->協議 }if ( $scheme = https ){
#如果用戶訪問的協議是https,$scheme變量表示用戶來訪問使用的協議。 echo "if ----> $scheme";
#則輸出if --->協議 }

? ?return指令

? ? return用于完成對請求的處理,并直接向客戶端返回響應狀態碼,比如:可以指定重定向URL(對于特殊重定向狀態碼,301/302等) 或者是指定提示文本內容(對于特殊狀態碼403/500等),處于此指令后的所有配置都將不被執行,return可以在server、if 和 location塊進行配置。

使用格式: ? ? ? ?

return code :返回狀態碼

return code [text]:返回狀態碼可以選擇性加一個文本

return code url :返回某個狀態碼直接跳轉到某個url

舉例:訪問/test文件直接返回403報錯
server {
#server模塊listen 80;
#監聽所有80端口server_name www.kgc.com;
#虛擬主機www.kgc.com        root /data/nginx/pc;
#定義根目錄位置location /test{return 403;
#location模塊訪問根下的/test即返回403錯誤
}
}

? ?set指令

設置變量,例如set $name kgc 設置name變量值為kgc。

location /main {root /data/nginx/html/pc;index index.html;default_type text/html;set $name kgc;
#定義變量name的值為kgcreturn $name;
#返回name變量的值   
}

? ?break指令

只跳出 rewrite中的(if , set ,return)指令,其他不跳出,如server模塊內的不跳出。

location /main {root /data/nginx/html/pc;index index.html;default_type text/html;set $name kgc;
#定義name變量為kgcreturn $name;
#返回name變量值break; 
#location塊中break后面指令還會執行,只會跳過rewrite中4個指令的內容,其他內容繼續執行set $my_port $server_port;echo $my_port;
#輸出為空,因為跳過了set指令的執行內容。echo命令需要安裝第三方模塊}

3.rewrite標志

?格式: rewrite 客戶輸入的(可用原始url正則表示)? ?你想讓客戶訪問的?(可用url正則表示)? ? ?標志(即動作)

. 表示任意字符

\d 表示匹配數字

* 表示任意長度字符包括0次

.* 表示任意長度字符不包括0次

? ?redirect標志

redirect 等于302即臨時重定向,不會在瀏覽器中緩存。

? ?permanent標志

permanent 等于301即永久重定向,會在瀏覽器中緩存。

? ?break標志

break標志會重定向,但是不會顯示跳轉后的域名,只顯示用戶輸入的域名。

? ?last標志

last標志,重寫完成后,停止對當前URI在當前location中后續的其它重寫操作,而后對新的URL啟動新一輪重寫檢查,不建議在location中使用。

? ?rewrite標志實驗

1、首先在主配置文件中創建2個虛擬主機,www.bj.com和www.beijing.com并且使用rewrite指令使得訪問www.bj.com時跳轉到www.beijing.com。

redirect、permanent實例,訪問www.bj.com跳轉到www.beijing.com
配置文件中添加:
server {listen 80;
#監聽80端口server_name www.bj.com;
#虛擬主機www.bj.comroot /data/nginx/bj;
#虛擬主機1根目錄location / {root /data/nginx/bj;
#虛擬主機1根目錄rewrite /  http://www.beijing.com  permanent;
#訪問虛擬主機1 www.bj.com時使用rewrite永久重定向到www.beijing.com。注意此處協議寫全
}}
server {listen 80;
#監聽80端口server_name www.beijing.com;
#虛擬主機2 www.beijing.comroot /data/nginx/beijing;
#虛擬主機2根目錄
}
nging -t
#檢查配置文件是否有錯誤
nginx  -s reload
#熱加載nginx配置文件

2、創建虛擬主機1和虛擬主機2的根目錄并在虛擬主機1即www.bj.com的index.html中寫入內容“this? is? bj”在虛擬主機2的根目錄即www.beijing.com的index.html中寫入內容“this is bj jump beijing”?

mkdir -p /data/nginx/bj
#創建www.bj.com的根目錄
mkdir -p /data/nginx/beijing
#創建www.beijing.com的根目錄
echo "this is bj">/data/nginx/bj/index.html
#將this is bj 寫入www.bj.com的根目錄文件index.html中
echo "this is bj  jump beijing">/data/nginx/beijing/index.html
#將this is bj  jump  beijing 寫入www.beijing.com的根目錄文件index.html中

3、使用另外一臺機器在/etc/hosts中添加本機ip對應www.bj.com和www.beijing.com。然后使用curl訪問查看是否為302永久重定向提示,然后使用curl 域名? -L,查看跳轉后的網頁內容。

vim /etc/hosts
#編輯hosts文件
#添加內容:
192.168.30.11  www.bj.com  www.beijing.com
#此處ip為自己ip

4、redirect臨時重定向和break使用只需要將配置文件中的permanent改為對應標志即可

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

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

相關文章

LC打怪錄 283. moving zero

題目鏈接 力扣 class Solution:def moveZeroes(self, nums: List[int]) -> None:l0for r in range(len(nums)):if nums[r]:nums[l], nums[r] nums[r], nums[l]l 1return nums 方法一: 思路 雙指針 1. def moveZeroes(self, nums: List[int]) -> None: …

Stable Diffusion 3正式發布,旨在鞏固其在AI圖像領域相對于Sora和Gemini的領先地位

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

vue3 + vite 項目可以使用純Js開發嗎?

答案:可以 創建項目: 按照鏈接參考或者按官方: webstorm 創建vue3 vite 項目-CSDN博客 項目目錄 tsconfig.json 配置允許js allowJs指定是否編譯js文件,在任意文件當中,如果我們模塊使用js寫的,那么我們需要 將all…

地理空間分析15——Python在應急響應與地理空間分析中的創新應用

目錄 寫在開頭1.Python及其在地理空間分析中的應用地理空間數據處理庫地理空間數據可視化工具 2.應急響應中的Python應用實例2.1 災害風險評估2.2 實時數據分析與響應2.3資源優化分配 3 地震應急響應案例:利用Python進行數據分析3.1 背景介紹3.2 數據收集與處理3.3 …

鏈式插補 (MICE):彌合不完整數據分析的差距

導 讀 數據缺失可能會扭曲結果,降低統計功效,并且在某些情況下,導致估計有偏差,從而破壞從數據中得出的結論的可靠性。 處理缺失數據的傳統方法(例如剔除或均值插補)通常會引入自己的偏差或無法充分利用數…

機器學習:模型選擇和模型優化

進行數據處理之后,我們得到了x_train和y_train,我們就可以用來進行回歸或分類模型訓練啦~ 一、模型選擇 我們這里可能使用的是回歸模型(Regression),值得注意的是,回歸和分類不分家。分類是預測離散值&…

策略的更新、加載與同步

C語言的C庫提供了策略的更新、加載與同步的方法,這里引入多線程,達到區分讀寫任務(生產者——消費者 模型)的目的。 示例: /*brief check strategy to update, reload, synchronized to read(stoped by SIGINT)author…

Mysql標量子查詢

目錄 子查詢標量子查詢數據準備 子查詢 SQL語句中嵌套select語句,稱為嵌套查詢,又稱子查詢。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查詢外部的語句可以是insert / update / delete / select 的任何一個&…

git的安裝、使用

文章目錄 安裝gitgit學習網站git初始配置具體配置信息 新建版本庫(倉庫)git的工作區域和文件狀態工作區域文件狀態git文件提交的基礎指令 git基礎指令1. 版本提交2. 分支創建3. 分支切換4. 分支合并(1) git merge(2) git rebase 5. 在git的提交樹上移動(…

Ps:銳化工具

銳化工具 Sharpen Tool可用于增強圖像局部區域的對比度,從而提高圖像的清晰度和細節,特別適用于提升照片的邊緣定義和紋理細節。 快捷鍵:無 ◆ ◆ ◆ 常用操作方法與技巧 1、如果直接在像素圖像上使用銳化工具,可嘗試使用“漸隱…

怎么優雅地訪問ChatGPT

ChatGPT,這顆璀璨的智能結晶,在2022年歲末之際,由OpenAI實驗室傾力鑄就,猶如夜空中躍動的智慧星辰,點亮了人工智能領域的新紀元。猶如汪洋中的一座燈塔,ChatGPT以其獨特的智慧光輝引人注目,然而…

Linux:kubernetes(k8s)node節點加入master主節點(3)

Linux:kubernetes(k8s)搭建mater節點(kubeadm,kubectl,kubelet)-CSDN博客https://blog.csdn.net/w14768855/article/details/136415575?spm1001.2014.3001.5502 我在上一章部署好了主節點&…

前端打包部署(黑馬學習筆記)

我們的前端工程開發好了,但是我們需要發布,那么如何發布呢?主要分為2步: 1.前端工程打包 2.通過nginx服務器發布前端工程 前端工程打包 接下來我們先來對前端工程進行打包 我們直接通過VS Code的NPM腳本中提供的build按鈕來完…

從下一代車規MCU厘清存儲器的發展(2)

目錄 1.概述 2.MCU大廠的選擇 2.1 瑞薩自研STT-MRAM 2.2 ST專注PCM 2.3 英飛凌和臺積電聯手RRAM 2.4 NXP如何計劃eNVM 3.小結 1.概述 上篇文章,我們簡述了當前主流的存儲器技術,現在我們來講講各大MCU大廠的技術選擇 2.MCU大廠的選擇 瑞薩日…

redis的RDB和AOF

Redis是一種高性能的鍵值對存儲系統,它支持多種類型的數據結構,如字符串、列表、集合、哈希表、有序集合等。Redis提供了兩種不同的持久化機制來確保數據的安全性:RDB(Redis Database)和AOF(Append Only Fi…

Tomcat布署及優化二-----Mysql和虛擬機

1.Mysql搭Blog 1.1下載安裝包 看一下tomcat狀態 1.2放到指定目錄 cp jpress-v3.2.1.war /usr/local/tomcat/webapps/ cd /usr/local/tomcat/webapps/ 1.3路徑優化 ln -s jpress-v3.2.1 jpress 看jpress權限 1.4生成配置文件 cat >/etc/yum.repos.d/mysql.repo <<E…

掘根寶典之C語言指針詳解

目錄 什么是指針&#xff1f; 與指針相關的運算符 指針類型的意義 指針的大小 初始化 將指針直接指向一個已經存在的變量或內存地址&#xff1a; 使用malloc函數動態分配內存&#xff0c;并將指針指向新分配的內存&#xff1a; 使用calloc函數動態分配內存&#xff0c;并…

Javascript:常量與數據類型

一、前言 介紹完變量之后我們來對常量進行了解一番&#xff0c;關于常量我們需要知道些什么呢&#xff1f; 二、正文 1.常量的基本使用 使用const聲明的變量稱為常量&#xff0c;當某個變量的字面量無需改動的時候就能夠用到常量。 //聲明一個常量 const G 9.8 //輸出這個常量…

您的計算機已被pings勒索病毒感染?恢復您的數據的方法在這里!

導言&#xff1a; 在數字時代&#xff0c;數據是企業和個人生活中不可或缺的一部分。然而&#xff0c;隨著勒索病毒的不斷進化和傳播&#xff0c;我們的數據面臨著前所未有的威脅。其中&#xff0c;.pings 勒索病毒是最新一輪威脅之一&#xff0c;它以其獨特的加密算法和無情的…

leetcode-字符串中的單詞數

434. 字符串中的單詞數 題解&#xff1a; 這個問題可以通過遍歷字符串&#xff0c;當遇到非空格字符時&#xff0c;判斷其前一個字符是否為空格&#xff0c;如果是&#xff0c;則說明這是一個新的單詞的開始&#xff0c;計數器加一。最后返回計數器的值即可。 class Solutio…