IISExpress 運行的站點開放局域網訪問

IISExpress 運行的站點開放局域網訪問

問題起因

筆者希望在 Windows 10 下使用 IISExpress 的輕量服務器部署一個局域網內運行的臨時站點(運行機器的局域網地址爲 192.168.0.180,監聽端口 8888),直接按照 IISExpress 的啓動方法啓動網站後,發現只能在本機通過 127.0.0.1:8888 或者 localhost:8888 的 URL 訪問,直接在局域網內其他設備訪問 192.168.0.180:8888 均連接失敗。經查是 Windows 自帶的防火牆阻斷了訪問,因此要把希望其他機器訪問的本機端口加入防火牆放行端口中。

解決方案

第一步:配置網站開放端口

設置 IISExpress 配置文件 applicationhost.config(通常位於 C:\Users\你的用戶名\Documents\IISExpress\config 目錄下)。
找到要設置的網站的 <sites> 標籤,將要開放非本機訪問的站點的 <bindings> 標籤下增加下列屬性:

<binding protocol="http" bindingInformation="*:8888:*" />

例如:

 <site name="DirectoryView" id="3" serverAutoStart="true">
     <application path="/">
         <virtualDirectory path="/" physicalPath="G:\folder" />
     </application>
     <bindings>
         <binding protocol="http" bindingInformation=":8888:localhost" />
         <binding protocol="http" bindingInformation=":8888:127.0.0.1" />
         <binding protocol="http" bindingInformation="*:8888:*" />
     </bindings>
</site>

第二步:添加 URL 保留

管理員身份打開命令提示符或者 Powershell 並執行以下命令:

netsh http add urlacl url=http://*:8888/ user="NT AUTHORITY\INTERACTIVE"

完成後可以通過命令

netsh http show urlacl

查看本機現有的所有保留 URL,當在諸多記錄中看到這條時,說明 http://*:8888/ 這個 URL 已經被保留好了:

保留的 URL              : http://*:8888/
    用戶: NT AUTHORITY\INTERACTIVE
        偵聽: Yes
        委派: No
        SDDL: D:(A;;GX;;;IU)

如果以後不需要保留這個 URL 了,就執行相反命令刪除掉即可:

netsh http delete urlacl url=http://*:8888/

第三步:打開防火牆限制

管理員身份打開命令提示符或者 Powershell 並執行以下命令:

netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=8888 profile=private remoteip=localsubnet action=allow

配置完成後,防火牆就會放行 8888 端口上的 TCP 協議數據交換請求。通過命令

netsh advfirewall firewall show rule name="IISExpressWeb"

查看規則名爲 IISExpressWeb 的規則是否成功添加:

PS C:\Windows\system32> netsh advfirewall firewall show rule name="IISExpressWeb"

規則名稱:                             IISExpressWeb
----------------------------------------------------------------------
已啓用:                               是
方向:                                 入
配置文件:                             專用
分組:
本地 IP:                              任何
遠程 IP:                              LocalSubnet
協議:                                 TCP
本地端口:                            8888
遠程端口:                           任何
邊緣遍歷:                             否
操作:                                 允許
確定。

同樣地,如果以後不需要,就把這條規則刪除掉就好:

netsh advfirewall firewall delete rule name="IISExpressWeb"

完成

使用命令行

"C:\Program Files\IIS Express\iisexpress.exe" /siteid:3

運行網站(筆者這裏是 id3 號的站點),從其他設備訪問 http://192.168.0.180:8888/,可以正常看到運行的網站了。

總結

IISExpress 作爲微軟開發的 IIS 的輕量版,具有 IIS 的大多數功能,只要把網站路徑設置正確,可以作爲臨時服務器運行靜態網站或者基於 ASP.NET 的應用。當然,目錄瀏覽、虛擬目錄、重定向等等常見網站配置功能都可以通過寫配置文件通過相應的鍵值設置。只是配置的時候需要自己通過配置文件 applicationhost.config 來設置網站參數而已,不如 IIS 的圖形界面直觀,但是對於程序猿來說,有沒有圖形又有什麼關係呢(逃)。

個人網站
2019.7.12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章