关于haproxy的重定向
一. haproxy實(shí)現(xiàn)request請(qǐng)求重定向
關(guān)于haproxy 請(qǐng)求重定向主要會(huì)用到:1. redirect ;2. redir 這兩類重定向配置語(yǔ)法。??
1. redirect重定向的用法:(redirect通常配置在haproxy acl部分)
redirect一般有兩個(gè)指令來(lái)執(zhí)行HTTP重定向:
http-requets redirect???? (此種方式支持日志變量格式)、
redirect????????????????????????? (此種方式只依賴于靜態(tài)字符串)
?
這兩個(gè)指令的語(yǔ)法是相同的,即redirect現(xiàn)在被認(rèn)為是傳統(tǒng)和配置應(yīng)該移動(dòng)到http-request?redirect形式。
一個(gè)其它的主要區(qū)別是:http-request?redirect使用日志可變格式而redirect語(yǔ)句只依賴于靜態(tài)字符串。
redirect有三種重定向方式:
(1)位置重定向
使用語(yǔ)法如下:
redirect location?<loc> [code <code>] <option> [{if | unless} <condition>]
?
使用位置重定向,例如下面所示指令可以將用戶重定向到所提供的精確位置,?該位置可以是第三方URL鏈接,也可以是本地web服務(wù)的另一個(gè)訪問(wèn)路徑
1. http-request?redirect?location?<loc>?[code?<code>]?[<option>]?[<condition>]
2. redirect?location?<loc>?[code?<code>]?[<option>]?[<condition>]
相關(guān)指令參數(shù)如下:
*?<loc>?:一個(gè)日志格式變量?(或簡(jiǎn)單的字符串redirect語(yǔ)句)描述了新位置;
*?code?<code>(可選):HTTP重定向的狀態(tài)代碼來(lái)執(zhí)行。 此選項(xiàng)下的允許的狀態(tài)碼如下所示:
| 狀態(tài)碼 | 含義 |
| 301 | 永久移動(dòng),轉(zhuǎn)發(fā) |
| 302 | 臨時(shí)移動(dòng),不應(yīng)該由客戶端進(jìn)行緩存。?這是默認(rèn)值,如果沒(méi)有code配置。 |
| 303 | 像302,但是瀏覽器必須使用GET獲取新位置 |
| 307 | 像302,但瀏覽器必須重新使用相同的方法之一,從原來(lái)的請(qǐng)求 |
| 308 | 像301,但瀏覽器必須重新使用相同的方法比從原始請(qǐng)求所述一個(gè) |
?
*?<option>(可選):?可以是以下任何或組合的聲明:
1. set-cookie?NAME[=value] :一個(gè)Set-Cookie頭部被添加到重定向。該cookie被命名為名稱,可以有一個(gè)可選的值值。
2.??clear-cookie?NAME[=]一個(gè)特殊的Set-Cookie頭被添加到重定向。該Cookie名為名稱和最大年齡的cookie參數(shù)設(shè)置為0,目的是為了指示瀏覽器刪除cookie。
注意:在于瀏覽器中,這是兩個(gè)不同的Cookie:NAME和NAME = 以上根據(jù)您的流量模式,必須將兩個(gè)語(yǔ)句適應(yīng)。
*?if | unless?:用于條件判斷
*?<condition>?(可選):用于匹配acl,一般為acl的名稱
?
?
(2)前綴重定向
使用語(yǔ)法如下:
redirect prefix?<loc> [code <code>] <option> [{if | unless} <condition>]
?
使用前綴重定向,將用戶重定向到由concateneting建立了一個(gè)網(wǎng)址<pfx>和完整的原始URI路徑:
1. http-request?redirect prefix <pfx>?[code?<code>]?[<option>]?[<condition>]
2. redirect prefix <pfx>?[code?<code>]?[<option>]?[<condition>]
相關(guān)指令參數(shù)如下:
*?<pfx>一個(gè)日志格式變量?(或簡(jiǎn)單的字符串redirect語(yǔ)句)描述了新的位置前綴。
*?code?<code>(可選):HTTP重定向的狀態(tài)代碼來(lái)執(zhí)行。 此選項(xiàng)下的允許的狀態(tài)碼如下所示:
| 狀態(tài)碼 | 含義 |
| 301 | 永久移動(dòng),轉(zhuǎn)發(fā) |
| 302 | 臨時(shí)移動(dòng),不應(yīng)該由客戶端進(jìn)行緩存。?這是默認(rèn)值,如果沒(méi)有code配置。 |
| 303 | 像302,但是瀏覽器必須使用GET獲取新位置 |
| 307 | 像302,但瀏覽器必須重新使用相同的方法之一,從原來(lái)的請(qǐng)求 |
| 308 | 像301,但瀏覽器必須重新使用相同的方法比從原始請(qǐng)求所述一個(gè) |
?
*?<option>(可選):?可以是以下任何或組合的聲明:
?
drop-query?:在執(zhí)行串聯(lián)時(shí)從原來(lái)的URL刪除查詢字符串
append-slash?:配合使用drop-query?,在該URL的末尾添加一個(gè)“/”字符
set-cookie?NAME[=value]?:一個(gè)Set-Cookie頭部被添加到重定向。該cookie被命名為名稱,可以有一個(gè)可選的值值。
clear-cookie?NAME[=] :一個(gè)特殊的Set-Cookie頭被添加到重定向。該Cookie名為名稱和最大年齡的cookie參數(shù)設(shè)置為0,目的是為了指示瀏覽器刪除cookie。
?
*?if | unless?:用于條件判斷
*?<condition>?(可選):用于匹配acl,一般為acl的名稱
?
(3)協(xié)議(計(jì)劃)重定向(比如將http重定向到https)
使用語(yǔ)法如下:
redirect scheme?<sch> [code <code>] <option> [{if | unless} <condition>]
?
使用協(xié)議重定向,例如下面所示指令可以將用戶重定向到所提供的新的http協(xié)議url鏈接,?一般用于非安全鏈接跳轉(zhuǎn)到安全鏈接,比如http跳轉(zhuǎn)到https上
1. http-request?redirect scheme <schloc>?[code?<code>]?[<option>]?[<condition>]
2. redirect scheme <sch>?[code?<code>]?[<option>]?[<condition>]
相關(guān)指令參數(shù)如下:
*?<loc>?:一個(gè)日志格式變量?(或簡(jiǎn)單的字符串redirect語(yǔ)句)描述了新位置;
*?code?<code>(可選):HTTP重定向的狀態(tài)代碼來(lái)執(zhí)行。 此選項(xiàng)下的允許的狀態(tài)碼如下所示:
| 狀態(tài)碼 | 含義 |
| 301 | 永久移動(dòng),轉(zhuǎn)發(fā) |
| 302 | 臨時(shí)移動(dòng),不應(yīng)該由客戶端進(jìn)行緩存。?這是默認(rèn)值,如果沒(méi)有code配置。 |
| 303 | 像302,但是瀏覽器必須使用GET獲取新位置 |
| 307 | 像302,但瀏覽器必須重新使用相同的方法之一,從原來(lái)的請(qǐng)求 |
| 308 | 像301,但瀏覽器必須重新使用相同的方法比從原始請(qǐng)求所述一個(gè) |
?
*?<option>(可選):?可以是以下任何或組合的聲明:
1. set-cookie?NAME[=value] :一個(gè)Set-Cookie頭部被添加到重定向。該cookie被命名為名稱,可以有一個(gè)可選的值值。
2.??clear-cookie?NAME[=]一個(gè)特殊的Set-Cookie頭被添加到重定向。該Cookie名為名稱和最大年齡的cookie參數(shù)設(shè)置為0,目的是為了指示瀏覽器刪除cookie。
注意:在于瀏覽器中,這是兩個(gè)不同的Cookie:NAME和NAME = 以上根據(jù)您的流量模式,必須將兩個(gè)語(yǔ)句適應(yīng)。
*?if | unless?:用于條件判斷
*?<condition>?(可選):用于匹配acl,一般為acl的名稱
如下為一個(gè)簡(jiǎn)單的實(shí)例:
acl http ? ? ?ssl_fc,nothttp-request redirect scheme https if http
?
總結(jié):
redirect三種重定向可以混合使用,比較常用的有redirect prefix 和 redirect location這兩種方式,從某種理解上可以交差使用;
?
2. redir重定向的用法:(redir通常配置在haproxy backend部分)
使用redir 會(huì)將發(fā)往backend的站點(diǎn)服務(wù)請(qǐng)求均以302狀態(tài)響應(yīng)發(fā)給需要重定向的server服務(wù)或站點(diǎn),此時(shí)haproxy不需要向后端web server提交請(qǐng)求;需要注意的是,在prefix后面不能使用/,且不能使用相對(duì)地址,以避免造成循環(huán),例如:
?
frontend ?main *:80 ? ?default_backend ? ? ? ? ? ? appbackend app ? ?balance ? ? roundrobin ? ?server node1 127.0.0.1:81 check weight 3 redir http://www.bluemobi.cn上面配置含義:所有發(fā)往localhost:81的請(qǐng)求做重定向,重定向到www.bluemobi.cn因此可以實(shí)現(xiàn)單臺(tái)服務(wù)器的重定向
又例如,如果我們要講訪問(wèn)的站點(diǎn)重定向到baidu.com
frontend ?main *:80 ? ?default_backend ? ? ? ? ? ? appbackend app ? ?balance ? ? roundrobin ? ?server node1 127.0.0.1:81 check weight 3 redir http://www.baidu.cn注意:redir只做跳轉(zhuǎn),如客戶端輸入:http://ip?,將會(huì)跳轉(zhuǎn)到指定的頁(yè)面上,此時(shí)客戶端的頁(yè)面的頁(yè)面也會(huì)跳轉(zhuǎn)到指定的頁(yè)面上,之后所有的請(qǐng)求都會(huì)遞交到該站點(diǎn)(前提該站點(diǎn)可以與客戶端通訊),而不再發(fā)往haproxy代理站點(diǎn),haproxy也不需要往后端web server提交客戶端發(fā)過(guò)來(lái)的請(qǐng)求。
?
二. haproxy實(shí)現(xiàn)error重定向
格式為: errorfile? 錯(cuò)誤代碼code? 錯(cuò)誤代碼響應(yīng)提示頁(yè)路徑
* errorfile 即根據(jù)客戶端頁(yè)面錯(cuò)誤code狀態(tài)將指定的錯(cuò)誤狀態(tài)頁(yè)面提示給客戶端,比如友情提示頁(yè)面,一般如下:
errorfile 403 /etc/haproxy/errorfiles/403.httperrorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http
例如:如果想訪問(wèn)403頁(yè)面重定向到其他頁(yè)面的話,則參考以下配置
frontend web_server? ?bind *:80
? ?default_backend webserver
? ?acl badguy src 10.0.10.1
? ?block if badguy
? ?errorloc 403 http://baidu.com/ ? ? #定義錯(cuò)誤頁(yè)面重定向
總結(jié): 錯(cuò)誤重定向可以更加友好地提示客戶端錯(cuò)誤狀態(tài),比如做定制頁(yè)面化跳轉(zhuǎn),以及網(wǎng)站維護(hù)升級(jí)等等,當(dāng)出現(xiàn)錯(cuò)誤時(shí),可以及時(shí)跳轉(zhuǎn)到預(yù)定好錯(cuò)誤提示頁(yè)面上。
轉(zhuǎn)自http://blog.51cto.com/blief/1752669? ? ? ? ? ? ? ? ? ? ? ??
轉(zhuǎn)載于:https://www.cnblogs.com/cnyw/p/10113913.html
總結(jié)
以上是生活随笔為你收集整理的关于haproxy的重定向的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PCA----降维
- 下一篇: 工业4.0的小小思考