1. 程式人生 > >nginx rewrite解決 jenkins error 404心得筆記

nginx rewrite解決 jenkins error 404心得筆記

nginx jenkins rewrite securityRealm

問題的描述:

報錯截圖:
技術分享圖片
登錄按鈕截圖:

技術分享圖片

登錄鏈接:

http://jenkins.oceanwing.com/securityRealm/commenceLogin?from=%2FsecurityRealm%2FloggedOut

點擊“登錄”,瀏覽器地址欄地址變成:

http://jenkins.oceanwing.com/securityRealm/#

分析問題:

看起來是跳轉問題,

思路:

考慮到nginx的rewrite可能可以解決這個問題

nginx配置文件中參數:

正則表達式匹配,其中:
* ~ 為區分大小寫匹配
* ~* 為不區分大小寫匹配
* !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配
文件及目錄匹配,其中:
* -f和!-f用來判斷是否存在文件
* -d和!-d用來判斷是否存在目錄
* -e和!-e用來判斷是否存在文件或目錄
* -x和!-x用來判斷文件是否可執行
flag標記有:
* last 相當於Apache裏的[L]標記,表示完成rewrite
* break 終止匹配, 不再匹配後面的規則
* redirect 返回302臨時重定向 地址欄會顯示跳轉後的地址
* permanent 返回301永久重定向 地址欄會顯示跳轉後的地址
一些可用的全局變量有,可以用做條件判斷
$args, 請求中的參數;
$content_length, HTTP請求信息裏的"Content-Length";
$content_type, 請求信息裏的"Content-Type";
$document_root, 針對當前請求的根路徑設置值;
$document_uri, 與$uri相同;
$host, 請求信息中的"Host",如果請求中沒有Host行,則等於設置的服務器名;
$limit_rate, 對連接速率的限制;
$request_method, 請求的方法,比如"GET"、"POST"等;
$remote_addr, 客戶端地址;
$remote_port, 客戶端端口號;
$remote_user, 客戶端用戶名,認證用;
$request_filename, 當前請求的文件路徑名
$request_body_file
$request_uri, 請求的URI,帶查詢字符串;
$query_string, 與$args相同;
$scheme, 所用的協議,比如http或者是https,比如rewrite  ^(.+)$  $scheme://example.com$1  redirect;
$server_protocol, 請求的協議版本,"HTTP/1.0"或"HTTP/1.1";
$server_addr, 服務器地址,如果沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(造成資源浪費);
$server_name, 請求到達的服務器名;
$server_port, 請求到達的服務器端口號;
$uri, 請求的URI,可能和最初的值有不同,比如經過重定向之類的。

技術分享圖片

$args是當前url問號後面的部分,相當於$query_string
$arg_id是id的值,格式為$arg_
rewrite是url重寫命令
permanent代表的是返回301永久重定向狀態碼
$host為當前網站的域名部分
結尾的問號代表不會將url後面的參數一起帶過去
^和$是代表的是正則匹配
註意:nginx中if命令不能嵌套,不能有多條件
if條件中的等號只有一個
註意if的空格問題
if條件中可以有多條url重寫語句
重定向是基於文件的,示例中是適用於commenceLogin?from=%2FsecurityRealm%2FloggedOut的結構

檢查和重載nginx配置

nginx -t
nginx -s reload

點擊“登錄”,鏈接重定向:

http://jenkins.oceanwing.com/?from=%2FsecurityRealm%2FloggedOut#

curl檢查:

技術分享圖片

問題解決

nginx rewrite解決 jenkins error 404心得筆記