網站首頁 編程語言 正文
Ingress 配置中關于重寫的注解有:
注解名 | 描述 |
---|---|
nginx.ingress.kubernetes.io/app-root | 訪問主域名的時候會自動跳轉到app-root 注解指定的路徑 |
nginx.ingress.kubernetes.io/rewrite-target | 將匹配到的url重定向到rewrite-target 注解指定的路徑 |
nginx.ingress.kubernetes.io/server-snippet | 使用注解可以在server{...} 配置塊中添加自定義的配置 |
nginx.ingress.kubernetes.io/configuration-snippet | 使用該注解可以在Nginx的location{...} 位置添加額外配置 |
官方介紹:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
下面重點介紹如何使用Ingress-Nginx
自定義配置實現規則的重寫(Rewrite)。
一、Rewrite 執行順序
- 執行server塊的rewrite指令;
- 執行location匹配;
- 執行配到location中的rewrite指令;
二、Rewrite 相關指令
2.1 if 指令
描述:判斷條件;
語法:if (condition) { ... }
作用域:server,location
if ($request_method = POST){
...
}
condition可以是:
- 變量名:如果這個變量是空字符串或者以0開始的字符串,則返回false,否則為true;
- = 和 !=:比較的一個變量和字符串;
- ~ 和 ~*:匹配正則表達式;
- -f 和 !-f:檢查一個文件是否存在;
- -d 和 !-d:檢查一個目錄是否存在;
- -e 和 !-e:檢查一個文件、目錄、符號鏈接是否存在;
- -x 和 !-x:檢查一個文件是否可執行;
2.2 return 指令
描述:返回狀態碼給客戶端,或重定向到指定URL,完成客戶端請求的處理。
語法:return [CODE] [URL]
作用域:server,location
return 301 https://m.example.com;
3.3 rewrite 指令
描述:該指令通過正則來改變url,可以同時存在一個或者多個rewrite指令。
語法:rewrite regex replacement [flag];
作用域:server,location,if
參數說明:regex
:用于匹配uri的正則表達式。使用圓括號()
標記要截取的內容replacement
:匹配成功后用于替換uri中被截取內容的字符串,默認情況下,如果該字符串是由http://或者https://開頭的,則不會繼續向下對uri進行其他處理,而是直接將重寫后的uri返回給客戶端;flag
:來設置rewrite對uri的處理行為,具體值如下:
flag參數值 | 描述 |
---|---|
last | 停止處理后續rewrite指令集,然后對當前重寫的新URI在rewrite指令集上重新查找 |
break | 停止處理后續rewrite指令集,并不在重新查找,但是當前location內剩余非rewrite語句和location外的的非rewrite語句可以執行 |
redirect | 如果replacement不是以http:// 或https://開始,返回302臨時重定向 |
permant | 返回301永久重定向 |
last
和break
標記的區別:last
標記在本條rewrite規則執行完后,會對其所在的server { … }
標簽重新發起請求,而break
標記則在本條規則匹配完成后,不再繼續匹配。
rewrite ^/api/user /api/v1/user break;
如果要引用匹配到的內容,那么需要使用小括號()
將正則表達式包含起來,然后通過$num
來引用匹配到的內容。比如:$1
表示引用第一個括號匹配的內容,$2
表示的是前面第二個()匹配的內容。
rewrite ^/api/(user|order|com)/(.*) /api/v1/$1/$2 break;
三、變量
3.1 自定義變量
定義變量可以使用set
指令,其格式:
set $變量名 變量值;
set指令的作用范圍是server、location、if。
如果使用變量,可以直接通過變量名進行訪問。
set $agentFlag 0;
if ( $http_user_agent ~* "(Mobile)" ) {
set $agentFlag 1;
}
if ( $agentflag = 1 ) {
return 301 https://m.example.com;
}
3.2 自帶變量
Nginx默認自帶一些變量,可以很方便的獲取到服務器環境的各種信息。
變量名 | 描述 |
---|---|
$args | 請求行參數,同$query_string |
$content_length | Content-length請求頭 |
$content_type | Content-Type請求頭 |
$document_root | 當前請求在root指令中指定的值 |
$host | 主機名或服務器名稱 |
$http_user_agent | 客戶端信息 |
$http_cookie | cookie日志信息 |
$limit_rate | 連接速率限制 |
$request_method | 請求方式 |
$remote_addr | 客戶端IP |
$remote_port | 客戶端端口 |
$remote_user | 經過Auth Basic Module驗證的用戶名 |
$request_filename | 當前請求的文件路徑,由root或alias指令與URI請求生成 |
$scheme | 請求方法 |
$server_protocol | 服務器協議版本 |
$server_addr | 服務器地址 |
$server_name | 服務器名稱 |
$server_port | 服務器端口號 |
$request_uri | 包含請求參數的原始URI,但不包含主機名 |
$uri | 同上,但是不帶請求參數 |
$document_uri | 同$uri |
四、Location匹配規則
=
開頭表示精確匹配;^~
開頭表示uri以某個常規字符串開頭,理解為匹配url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa
匹配到;~
開頭表示區分大小寫的正則匹配 ;~*
開頭表示不區分大小寫的正則匹配;!~``開頭表示區分大小寫不匹配; !~*
開頭表示不區分大小寫的正則不匹配;/
表示通用匹配,任何請求都會匹配到;
原文鏈接:https://blog.csdn.net/zhongliwen1981/article/details/122319993
相關推薦
- 2022-06-26 詳解Python數據類型、進制轉換、字符串格式化的問題_python
- 2023-11-22 python文件打開時的訪問模式
- 2023-02-01 Python動態演示旋轉矩陣的作用詳解_python
- 2022-09-15 C++中的整形字節數_C 語言
- 2022-06-08 Spring Cloud Nacos 配置動態刷新
- 2022-04-20 Android實現左側滑動菜單_Android
- 2022-05-10 .NET實現異步編程async和await_實用技巧
- 2023-06-18 Python實現將內容轉為base64編碼與解碼_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支