我在我們的DMZ中有一個反向代理,它將wss請求轉換爲https(至少從我在IIS日誌中可以看到的內容)。也就是說,JavaScript卻使一個網頁套接字請求通過HTTP的IIS ARR代理WebSockets
wss://cname.domain.com
和反向代理服務器將其發送到
https://theserver.local
IIS的「theserver」正在運行,並且有一個HTTPS綁定。 ARR安裝並具有被配置如下重寫規則:
<rule name="Rewrite ssl to non-ssl" stopProcessing="true">
<condition logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+):// />
</condition>
<match url="the_app/(.*)" />
<action type="Rewrite" url="{MapProtocol:{C:1}}://theserver.local:8080/{R:1}" />
</rule>
<rewriteMap name="MapProtocol">
<add key="https" value="http" />
<add key="wss" value="ws" />
<rewriteMap>
這應該路線HTTPS和WSS傳入請求的路徑/ the_app到http://theserver:8080/ {path_and_query_string}和WS:// theserver:8080/{分別} path_and_query_string。
我也有以下重寫設置(最高優先級)來處理進來通過HTTPS(因爲我可以告訴它們所基於的路徑),這些WSS請求:
<rule name="Rewrite https to ws" stopProcessing="true">
<match url="the_app/websockets/(%7B.+%7D)" />
<action type="Rewrite" url="ws://theserver:8080/websockets/{R:1}" />
</rule>
的重寫完美的作品...但IIS會引發502.2錯誤嘗試將https從ws(無效網關)發送到websockets請求。我打開了失敗的請求追蹤,似乎無法找到更多相關信息。
可以這樣做嗎?