溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

IIS實(shí)現(xiàn)反向代理時(shí)如何設(shè)置Cookie域

發(fā)布時(shí)間:2021-06-17 12:43:58 來源:億速云 閱讀:310 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹了IIS實(shí)現(xiàn)反向代理時(shí)如何設(shè)置Cookie域,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

反向代理

神馬是反向代理?指以代理服務(wù)器來接受Internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給Internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。我們可以通過反向代理實(shí)現(xiàn)負(fù)載平衡、突破防火墻限制等一些非常實(shí)用的Web服務(wù)器功能,目前反向代理不管在私有云還是公有云的虛擬機(jī)上用的很多很多。

引用

IIS通過URL重寫可以實(shí)現(xiàn)反向代理,通過簡單的配置即可以將請(qǐng)求轉(zhuǎn)發(fā)到其它內(nèi)部站點(diǎn)。

此時(shí)被代理的所有站點(diǎn)的cookie的域(domain)會(huì)自動(dòng)設(shè)置為提供反向代理功能的站點(diǎn)的域,這一般來說沒有問題。但是在多站點(diǎn)共享cookie時(shí)會(huì)存在問題。

比如有一個(gè)對(duì)外的域名 proxy.fireflysoft.net,這個(gè)域名指向一個(gè)提供反向代理的站點(diǎn);然后還有一個(gè)域名pay.fireflysoft.net,指向一個(gè)獨(dú)立的IIS站點(diǎn),提供支付服務(wù);然后proxy.fireflysoft.net/mall 提供商城服務(wù),用戶在這里下單后支付,需要跳轉(zhuǎn)到pay.fireflysoft.net;

為了在這兩個(gè)站點(diǎn)之間實(shí)現(xiàn)用戶狀態(tài)共享,這里希望他們之間可以共享SessionID,這個(gè)值保存在cookie中,所以實(shí)際上是期望共享cookie,共享cookie可以通過設(shè)置不同站點(diǎn)cookie的域?yàn)橄嗤闹祦韺?shí)現(xiàn)。

比如這里希望proxy.fireflysoft.net和pay.fireflysoft.net的cookie域值都為fireflysoft.net,這樣proxy.fireflysoft.net的用戶狀態(tài)就可以為pay.fireflysoft.net所使用。但是這面臨上邊提到的反向代理站點(diǎn)cookie域自動(dòng)設(shè)置問題。

關(guān)于這個(gè)問題,網(wǎng)上可以搜索到的方案大部分都是Nginx的,其實(shí)IIS的URL重寫也是支持的,只不過用的人可能比較少,所以查不到什么資料。

這個(gè)解決方案是在IIS的論壇上找到的,有人問同樣的問題:https://forums.iis.net/t/1193378.aspx。帖子中并沒有給出直接的答案,而是參考一個(gè)使用URL重寫設(shè)置cookie HttpOnly的方案:

http://clarify.dovetailsoftware.com/gsherman/2011/01/20/using-the-url-rewrite-module-to-set-your-cookies-to-httponly/

有興趣的可以讀一下原文,下邊將直接給出解決方案。

URL重寫的規(guī)則會(huì)保存到web.config中,因?yàn)樵O(shè)置cookie屬于URL重寫的出站規(guī)則,所以直接在出站規(guī)則中增加相關(guān)配置:

<rewrite>  
<outboundRules>    
<rule name="Add Domain" preCondition="No Domain">
     <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
     <action type="Rewrite" value="{R:0}; domain=fireflysoft.net" />
     <conditions>
     </conditions>
    </rule>
    <preConditions>
     <preCondition name="No Domain">
      <add input="{RESPONSE_Set_Cookie}" pattern="." />
      <add input="{RESPONSE_Set_Cookie}" pattern="; domain=.*" negate="true" />
     </preCondition>
    </preConditions>
  </outboundRules>
 </rewrite>

代碼中包含兩部分:

首先是前提條件preConditions:針對(duì)響應(yīng)時(shí)設(shè)置cookie,且沒有設(shè)置cookie domain的情況;

然后是處理規(guī)則rule:針對(duì)響應(yīng)時(shí)設(shè)置的cookie,重寫cookie,增加domain的設(shè)置。

這樣cookie domain即設(shè)置為目標(biāo)值,從而實(shí)現(xiàn)cookie在二級(jí)域名之間的共享。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“IIS實(shí)現(xiàn)反向代理時(shí)如何設(shè)置Cookie域”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI