Iis

IIS 反向代理 CORS 問題背後的 FoundryVTT 伺服器

  • June 3, 2021

我在 FreeNAS 監獄中有一個 FoundryVTT 伺服器。我主要是按照這些說明來讓它工作的。我有一個以前的問題,我解決了,現在對於 <= v0.7.9 可以正常工作。但是,>= v0.8 不再有效,當我通過 WAN 訪問伺服器時,我不斷遇到與 CORS 相關的問題。我在日誌記錄和網頁控制台(或通過提琴手)中唯一能看到的是 403 和正文:

{“error”:“不允許跨域請求”}

錯誤頁面圖片

我已經聯繫了 FoundryVTT Discord,他們基本上說不應該更改任何與 CORS 相關的內容,並且我應該使用 IIS 管理器(v10.0.19041.1)以外的東西。

我試過的:

  • 已驗證這是較新版本的實際問題。創建了一個新的 0.7.9。實例遵循相同的步驟,它工作正常。
  • 添加自定義標題,如下所示:
<httpProtocol>
 &lt;customHeaders&gt;
   &lt;add name="Access-Control-Allow-Origin" value="*" /&gt;
   &lt;add name="Access-Control-Allow-Headers" value="Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers" /&gt;
   &lt;add name="Access-Control-Allow-Methods" value="GET,HEAD,OPTIONS,POST,PUT" /&gt;
   &lt;add name="Access-Control-Allow-Credentials" value="false" /&gt;
 &lt;/customHeaders&gt;
&lt;/httpProtocol&gt;

並使用它們的各種組合(例如指定www.myhost.com並允許憑據為真,* 允許標頭/方法)

  • 應用出站重寫規則:
&lt;rule name="Test1"&gt;
 &lt;match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" /&gt;
 &lt;action type="Rewrite" value="*" /&gt;
&lt;/rule&gt;
&lt;rule name="Test2"&gt;
 &lt;match serverVariable="RESPONSE_Access_Control_Allow_Headers" pattern=".*" /&gt;
 &lt;action type="Rewrite" value="*" /&gt;
&lt;/rule&gt;
&lt;rule name="Test3"&gt;
 &lt;match serverVariable="RESPONSE_Access_Control_Allow_Methods" pattern=".*" /&gt;
 &lt;action type="Rewrite" value="GET,HEAD,OPTIONS,POST,PUT,DELETE" /&gt;
&lt;/rule&gt;
&lt;rule name="Test4"&gt;
 &lt;match serverVariable="RESPONSE_Access_Control_Allow_Credentials" pattern=".*" /&gt;
 &lt;action type="Rewrite" value="false" /&gt;
&lt;/rule&gt;

還嘗試了各種組合,如前所述。

  • 安裝了CORS 模組並嘗試了各種方法,如下所示:
&lt;cors enabled="true" failUnlistedOrigins="false"&gt;
&lt;add origin="*" &gt;
 &lt;allowHeaders allowAllRequestedHeaders="true" /&gt;
 &lt;allowMethods&gt;
     &lt;add method="GET" /&gt;
     &lt;add method="POST" /&gt;
     &lt;add method="PUT" /&gt;
     &lt;add method="HEAD" /&gt;
     &lt;add method="OPTIONS" /&gt;
     &lt;add method="DELETE" /&gt;
 &lt;/allowMethods&gt;
&lt;/add&gt;
&lt;add origin="https://www.myhost.com" allowCredentials="true" maxAge="120" &gt;
 &lt;allowHeaders allowAllRequestedHeaders="true" /&gt;
 &lt;allowMethods&gt;
     &lt;add method="GET" /&gt;
     &lt;add method="POST" /&gt;
     &lt;add method="PUT" /&gt;
     &lt;add method="HEAD" /&gt;
     &lt;add method="OPTIONS" /&gt;
     &lt;add method="DELETE" /&gt;
 &lt;/allowMethods&gt;
&lt;/add&gt;
&lt;/cors&gt;

在檢查我在 IIS 中的應用程序是在 x86 還是 x64 模式下執行(它在 x64 模式下執行)之後,還特別嘗試安裝 CORS 模組的 x64 版本。

  • 重新啟動一切。

似乎對我遇到的錯誤沒有任何影響。在使用提琴手時,我可以看到如果我添加/更改標題,響應正在發生變化。下面是我在 IIS 中未應用任何 CORS 規則時擷取的 Fiddler 的圖片。我設法看到一個管理員登錄頁面,但是一旦我送出密碼,它就會給我錯誤。

提琴手擷取

我也有同樣的問題。我可以說的一件事是, Access-Control-Allow-Origin: * 在登錄期間將不起作用。(傳輸憑據時)我嘗試將其更改為我的實際 url 和埠,但這也不起作用。

對此有何更新?

編輯:討論現在在這裡: https ://gitlab.com/foundrynet/foundryvtt/-/issues/5263

IIS 的縮寫:system.webServer.proxy:preserveHostHeaders true 警告:這必須在伺服器級別設置,因此它可能會影響同一伺服器上的其他應用程序

Foundry 可能會改變/改進一些東西。仍在討論中。

引用自:https://serverfault.com/questions/1064615