Iis
具有反向代理和靜態的 Microsoft IIS 規則
我有一個 IIS 伺服器,它最初在 wwwroot 中託管靜態 HTML,但後來我們決定,如果百度蜘蛛嘗試爬網,我們會將流量映射到也在 IIS 伺服器旁邊執行的 NuxtJS Web 伺服器。
因此,我們安裝了 ARR(應用程序請求路由)以啟用反向代理,它工作正常,現在我們首先嘗試測試 URL 重寫入站規則的位置:
- 如果百度蜘蛛將請求映射到 NuxtJS 伺服器(http://localhost:3000)(這是為了先測試)
因此,我們希望如果普通使用者請求,那麼它將在 wwwroot 中提供靜態 HTML,因為它沒有達到規則,而是我得到了 500。
記筆記:
- 我正在使用 Windows 2012 和 IIS 8.5 版
- 如果我禁用我的入站規則,那麼它肯定會提供靜態 HTML 文件
那麼我需要創建另一個規則嗎?我期待如果它沒有達到任何規則,它剛剛在 wwwroot 中讀取的預設行為將會發生
更新
- 我決定為我的靜態 HTML 服務創建另一個規則。下面是 IIS 生成的重寫規則。我現在的問題是第二條規則不起作用。當我禁用第一條規則時,第二條規則就會起作用
<?xml version="1.0" encoding="UTF-8"?> <rules> <clear /> <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="false"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:3000/{R:1}" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="^((?Baidu).)*$" /> </conditions> </rule> <rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="false"> <match url="(.*)" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="^((?!Baidu).)*$" /> </conditions> <action type="Rewrite" url="{R:1}/index.html" /> </rule> </rules>
第一條規則中條件中的正則表達式不是 IIS 的有效正則表達式。如果您希望在使用者代理包含百度時觸發第一條規則,而在不包含百度時觸發第二條規則,則可以執行以下操作。注意第二條規則中條件的否定:
<?xml version="1.0" encoding="UTF-8"?> <rules> <clear /> <rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="false"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:3000/{R:1}" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="Baidu" /> </conditions> </rule> <rule name="StaticHTMLForBaiduCrawler" enabled="true" stopProcessing="false"> <match url="(.*)" /> <conditions> <add input="{HTTP_USER_AGENT}" pattern="Baidu" negate="true" /> </conditions> <action type="Rewrite" url="{R:1}/index.html" /> </rule> </rules>