iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

30天 IIS 面面觀系列 第 9

Day9. IIS 怎麼記的住那麼多設定?靠小抄(上) - Config files

  • 分享至 

  • xImage
  •  

我們前面聊過關於好多好多的設定,那關於這些設定,總該有個地方存吧?如果我想去查設定,我又該去哪裡查呢,是不是有實體檔案可以看?如果夠熟悉實體檔案,我是不是能夠修改實體檔案來達到我想要的效果?

以上的問題,我們一一來回答。是的,基本 IIS 裡的設定檔都是有實體檔案存在的,即使先前提過整體 Process 的建立流程 WAS 會去做暫存設定檔的建立(於 C:\inetpub\temp\appPools\ ),也是依循實際存在的設定檔產生的。

一般來說我們多數設定檔的內容都會建議透過介面去改,除非本身是介面不支援的設定檔,手動修改設定檔的風險是只要 syntax 一錯,造成設定檔讀取錯誤,可能只是一個小括號,就讓整個網站掛掉,在重要的伺服器上這是不被允許的。附帶一提,手動改導致設定檔出錯,在 IIS 的預設介面上會報出的 Http Error Code 是 500.19。

在 IIS 7 之後,IIS 主要以 XML-based 的設定檔系統來做設定儲存。IIS的設定檔主要存於 %WinDir%\System32\Inetsrv\Config,底下可以看到三個檔案:ApplicationHost.config,Administration.config,Redirection.config。這幾個檔案都可以直接拉到文字編輯器裡做查看,無需太特殊的工具。

ApplicationHost.config 幾乎三者中最常被查看的檔案,它會包含網站層級絕大部份的資訊,Application Pool、Site、Binding 等等都會存在這裡。像下圖中我們常常會在這個層級中做設定,會儲存這個層級裡修改的模組設定,作為各網站未更動時的預設的,就會是存在 ApplicationHost.config 裡。

https://ithelp.ithome.com.tw/upload/images/20220924/20142057O6aQUA8Fy1.png

Administration.config 主要儲存 IIS 管理相關功能的設定。像是一些 IIS Manger 上的管理模組、管理模組的設定等等都會被記錄在這個 config 裡,相對少會手動去看這個設定檔,

Redirection.config 是 IIS 7 以後支持設定檔集中化的設定檔案。能夠讓多台 Server 共用相同的設定檔,保有一致性。這個設定檔會指名共用的設定檔的所在位置。

IIS 關聯的設定檔如果往上找其實還有兩個重要的設定檔,但相對少手動查看,都是位於 %windir%\Microsoft.NET\Framework\framework_version\CONFIG 底下的 Machine.config 和 RootWeb.config,這兩個就跟 .NET 的 Application 較為相關。

既然有往上看,就有往下看,上面那張圖如果不是點最上面層級,而是點到單一網站的話,在右邊網站的設定,會被存到 Web.config 裡。Web.config 會存於各個 IIS Folder 裡,裡面存的就是網站層級的設定資訊。有些如單一網站與 .NET 配合行為的設定就會是存在這個裡面。

上面介紹了這麼多設定檔,不知道大家有沒有打開來看過,我抽其中一個檔案的片段給大家看看,設定檔裡大概會長得像這樣子:

https://ithelp.ithome.com.tw/upload/images/20220924/20142057HvLy8Rs7uc.png

透過一個個 section 段落的設定,階層式的決定各功能歸屬與套用。設定檔其實是有所謂的預設值存在的,部分設定在沒有做任何調整的時候,甚至不會在設定檔裡出現,但你在程式裡要用的時候,卻是能夠正常拿到設定值的。各位有好奇過像這樣的階層訂定、預設值會寫在哪裡嗎?也不賣關子,就在上面提到的路徑的更進去一層 %windir%\System32\inetsrv\config\schema。

https://ithelp.ithome.com.tw/upload/images/20220924/201420579GAUt2DWJ6.png

我們以 IIS_schema.xml 為例,上圖就能看到像是 site 層級裡的 binding,sslFlag 的預設值就會是 0,也就是 http,如同我們在介面上看到的。其他各欄位也有寫驗證要求類別、是否唯一等等值,像這個 IIS_schema.xml 就會儲存很多跟 IIS 相關設定檔的預設值,要查找的時候這邊會是一個選擇。檔案極度不建議更動,這個檔案會在 IIS 安裝完的時候就生成,也不太會有更動的可能,一樣,手動改設定檔若有錯誤可能會導致相關服務炸開,真的要改也務必備份。

介紹實體設定檔更多是當你要幫他人遠端除錯的時候,有一些基本會拿過來看一下設定的檔案,以我的習慣為例基本會拿 ApplicationHost.config 和問題網站的 Web.config,這兩個檔案結合著看,配合對預設值的概念,就能夠知道各個值在那台機器上是怎麼為網站設定的。

如果你更熟悉 GUI 介面,極端一點,在你備份好自己機器的設定檔後,你甚至可以直接把內容原封不動地蓋過自己本機的檔案,你打開 IIS 後就會看到新設定檔蓋上去之後,那台機器對應的樣貌(當然機器間路徑不一樣,它嘗試去讀路徑時找不到就可能會跳個警示,但不影響你看大多資訊)。

下一篇我們會以 ApplicationHost.config 稍微看一下設定檔的層級分布,怎麼去讀設定檔。


上一篇
Day8. 全面啟動,或全面重新啟動 - Restart、Stop、IIS Reset
下一篇
Day10. IIS 怎麼記的住那麼多設定?靠小抄(下) - Config files
系列文
30天 IIS 面面觀30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言