Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Tobin Titus
Abstrak
Sistem konfigurasi di IIS 7 ke atas didasarkan pada file XML terdistribusi, teks jelas, yang menyimpan pengaturan konfigurasi untuk seluruh platform server web, termasuk IIS, ASP.NET dan komponen lainnya, dan dapat secara opsional diatur di direktori konten bersama dengan konten web. Tingkat hierarki konfigurasi yang berbeda dapat didelegasikan oleh administrator komputer kepada pengguna lain, seperti administrator situs atau pengembang aplikasi. Default aman dan batas lockdown out-of-the-box akses tulis ke pengaturan konfigurasi hanya untuk administrator komputer; namun, fitur penguncian canggih dan terperinci memungkinkan pembukaan kunci yang aman dan delegasi manajemen pengaturan konfigurasi tertentu kepada lebih banyak pengguna, untuk cakupan namespace web mereka. Sistem kompatibel mundur, di tingkat API, dengan versi IIS sebelumnya, dan di tingkat XML, dengan versi kerangka kerja .NET sebelumnya. Dokumen ini memberikan gambaran umum tentang sistem konfigurasi baru.
Pendahuluan
Sistem konfigurasi di IIS didasarkan pada file XML terdistribusi, teks jelas, yang menyimpan pengaturan konfigurasi untuk seluruh platform server web, termasuk IIS, ASP.NET dan komponen lainnya, dan dapat secara opsional diatur di direktori konten bersama dengan konten web. Tingkat hierarki konfigurasi yang berbeda dapat didelegasikan oleh administrator komputer kepada pengguna lain, seperti administrator situs atau pengembang aplikasi. Default aman dan batas lockdown out-of-the-box akses tulis ke pengaturan konfigurasi hanya untuk administrator komputer; namun, fitur penguncian canggih dan terperinci memungkinkan pembukaan kunci yang aman dan delegasi manajemen pengaturan konfigurasi tertentu kepada lebih banyak pengguna, untuk cakupan namespace web mereka. Sistem kompatibel mundur, di tingkat API, dengan versi IIS sebelumnya, dan di tingkat XML, dengan versi kerangka kerja .NET sebelumnya.
Sistem konfigurasi baru dirancang untuk menjadi:
Sederhana: Semua status ada dalam file; Tidak ada penyimpanan kepemilikan yang digunakan; Tidak ada database konfigurasi dalam memori yang merupakan master nyata dari status konfigurasi (tidak seperti layanan IISADMIN di IIS 6.0); Skema ini digerakkan oleh data dan 100% deklaratif dan dapat ditemukan.
Low-TCO: Konfigurasi dapat di-xcopied bersama dengan konten web; Administrasi yang didelegasikan opsional menghilangkan keterlibatan administrator komputer dalam setiap perubahan konfigurasi; Penyatuan pengaturan dan model konfigurasi di seluruh IIS, ASP.NET dan platform server web lainnya menyediakan one-stop-shop untuk mengelola server menggunakan sekumpulan alat dan API yang sama (misalnya, file web.config mungkin berisi pengaturan IIS dan ASP.NET, dan ada satu tempat di kedua untuk mengontrol fitur seperti autentikasi, otorisasi, kesalahan kustom); pencadangan, pemulihan, manajemen keamanan (ACL) didasarkan pada alat dan proses sistem file standar.
Aman: Saat IIS diinstal, status konfigurasi berada dalam satu file yang dilindungi hanya untuk akses administrator mesin; Tidak ada delegasi yang diaktifkan secara default; Tidak ada informasi sensitif (seperti kata sandi) yang disimpan secara default; Ketika informasi sensitif perlu ditulis ke file konfigurasi, informasi tersebut secara otomatis dienkripsi di disk; Konfigurasi per aplikasi dapat dikotak pasir dan diisolasi dalam file khusus (dilindungi oleh ACL sistem file) sehingga aplikasi lain tidak dapat berbagi atau membaca pengaturan.
Dapat diperluas: Menambahkan ke skema hanyalah masalah menjatuhkan file XML ke folder skema; Tidak perlu memanggil API atau menjalankan alat untuk memperluas skema; Pengaturan diatur dalam blok terkait logis yang disebut 'bagian' (persis seperti dalam konfigurasi kerangka kerja .NET), dan menambahkan bagian baru itu mudah (tidak perlu menulis kode apa pun - tidak seperti dalam konfigurasi kerangka kerja .NET); Membaca pengaturan bagian kustom dari modul atau aplikasi server sederhana dan lurus ke depan.
Kompatibel: Aplikasi IIS yang ada dapat terus memanggil antarmuka seperti Admin Base Objects (ABO), penyedia IIS ADSI, dan penyedia IIS 6.0 WMI; Aplikasi .NET framework yang ada dapat terus memanggil antarmuka seperti System.Configuration dan System.Web.Configuration; Pengguna yang terbiasa dengan format XML machine.config dan web.config akan terus mengalami format dan sintaks yang sama dalam file-file ini, ditambah mereka akan dapat mengedit pengaturan IIS secara manual yang mengikuti format dan model yang sama; Pengguna yang terbiasa dengan nama properti IIS Metabase akan menemukan nama yang sama untuk properti dalam file konfigurasi IIS 7.0 ke atas yang baru.
Bersihkan Skema
Berikut adalah contoh yang menunjukkan skema untuk konfigurasi.
Ini menunjukkan bagaimana pengaturan autentikasi diatur di IIS 6, dan di IIS 7.0 ke atas.
Nota
Pembaca yang tidak terbiasa dengan konsep IIS 6.0 hanya dapat mengabaikan perbandingan dengan IIS 6.0 dan hanya membaca konsep dan manfaat IIS 7.0 ke atas.
Pertama-tama kita akan membandingkan cara konfigurasi bertahan dalam file, dan kemudian kita akan melihat definisi skema.
Dalam file konfigurasi itu sendiri:
//
// Snippet from IIS 6.0 Metabase.xml
//
<IIsWebService Location ="/LM/W3SVC"
... many lines here ...
AuthFlags="AuthAnonymous"
... many lines here ...
>
</IIsWebService>
<IIsWebDirectory Location ="/LM/W3SVC/1/ROOT/aspnet_webadmin/2_0_41016"
AuthFlags="AuthAnonymous | AuthNTLM"
>
</IIsWebDirectory>
<IIsWebVirtualDir Location ="/LM/W3SVC/Info/Templates/Public Web Site/Root"
AuthFlags="AuthAnonymous"
>
</IIsWebVirtualDir>
//
// Snippet from IIS 7.0 applicationHost.config
//
<anonymousAuthentication enabled="true" userName="…" password="" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<windowsAuthentication enabled="true" >
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
Kesimpulan utama:
- IIS 6.0 menggunakan daftar properti yang sangat panjang, "datar". Tidak ada hierarki atau pengelompokan properti. Sulit untuk mencari pengaturan konfigurasi di antara ratusan pengaturan dalam daftar yang sama. IIS 7.0 ke atas menggunakan hierarki bagian dan grup bagian, dan sub-elemen dalam bagian. Sangat mudah untuk mencari pengaturan autentikasi, dengan mencarinya di grup bagian autentikasi, atau di bagian autentikasi tertentu.
- IIS 6.0 menggunakan bendera untuk mengatur skema autentikasi. IIS 7.0 ke atas menggunakan bagian per skema autentikasi, dengan enabled="true|false" pada masing-masing. Pengaturan tambahan yang hanya relevan untuk beberapa skema autentikasi, hanya dapat diatur di bagian yang relevan (misalnya, nama pengguna dan kata sandi hanya dapat diatur untuk autentikasi anonim).
- IIS 6.0 menggunakan jalur di dalam file Metabase untuk menentukan tingkat konfigurasi (layanan, direktori virtual, direktori fisik). Konfigurasi untuk seluruh server berada dalam satu file. IIS 7.0 ke atas menggunakan satu file secara default, tetapi pengguna dapat memanfaatkan file web.config terdistribusi di direktori konten, yang menentukan pengaturan konfigurasi untuk cakupan mereka.
- IIS 6.0 menggunakan nama properti panjang dalam upaya untuk memiliki pengaturan konfigurasi yang dapat dijelaskan secara otomatis. Ini mencoba meningkatkan keterbacaan file dan membantu pengguna memahami apa yang dilakukan properti. IIS 7.0 ke atas menggunakan nama pendek tetapi selalu dalam konteks bagian tertentu, atau bahkan sub-elemen dalam bagian tersebut.
- IIS 6.0 menggunakan multi-sz (elemen yang dibatasi koma dalam satu properti string), dan bendera, untuk menangani beberapa nilai elemen, seperti NTAuthenticationProviders. IIS 7.0 ke atas menggunakan koleksi, dengan sintaks add/remove/clear sederhana, persis seperti konfigurasi .NET framework. Ini memungkinkan tingkat hierarki yang lebih rendah untuk menambahkan (atau menghapus) hanya elemen yang mereka butuhkan, alih-alih menduplikasi seluruh data dengan (atau tanpa) elemen yang dikatakan. Ini juga memberikan keterbacaan file yang lebih besar (yang diterjemahkan menjadi lebih sedikit kesalahan manusia ketika langsung mengeditnya).
Dalam file skema:
//
// Snippet from IIS 6.0 MBSchema.xml
//
<Property InternalName="AuthFlags" ID="6000" Type="DWORD" UserType="IIS_MD_UT_FILE" Attributes="INHERIT" >
<Flag InternalName="AuthAnonymous" Value="1" ID="6218" />
<Flag InternalName="AuthBasic" Value="2" ID="6219" />
<Flag InternalName="AuthNTLM" Value="4" ID="6220" />
<Flag InternalName="AuthMD5" Value="16" ID="6221" />
<Flag InternalName="AuthPassport" Value="64" ID="6299" />
</Property>
//
// Snippet from IIS 7.0 IIS_Schema.xml
//
<sectionSchema name="system.webServer/security/authentication/basicAuthentication">
<attribute name="enabled" type="bool" defaultValue="false" />
<attribute name="realm" type="string" />
<attribute name="defaultLogonDomain" type="string" />
<attribute name="logonMethod" type="enum" defaultValue="ClearText">
<enum name="Interactive" value="0" />
<enum name="Batch" value="1" />
<enum name="Network" value="2" />
<enum name="ClearText" value="3" />
</attribute>
</sectionSchema>
Kesimpulan utama:
- IIS 6.0 menggunakan ID (angka) untuk mengidentifikasi pengaturan. IIS 7.0 ke atas menggunakan string yang ramah untuk menamai pengaturan.
- IIS 6.0 menggunakan konsep non-intuitif seperti UserType dan terminologi seperti InternalName. IIS 7.0 ke atas menggunakan nama ramah yang masuk akal bagi pembaca manusia, dan tidak hanya aplikasi.
Hierarki File Konfigurasi
Status "master" untuk konfigurasi selalu merupakan file konfigurasi (tidak seperti di IIS 6.0, di mana itu adalah database konfigurasi dalam memori, yang dibersihkan ke disk secara berkala).
Pada tingkat akar (atau global), ada dua file terpisah:
- system32\inetsrv\config\applicationHost.config: Menyimpan default global untuk pengaturan server web (IIS).
- \windows\microsoft.net\framework\v2.0.50727\config\machine.config: Menyimpan pengaturan global default untuk kerangka .NET, termasuk beberapa pengaturan ASP.NET (sisanya berada di web.config di folder yang sama, yang terkadang disebut root web.config)
Alasan mengapa masih ada dua file terpisah adalah karena kedua teknologi memiliki perbedaan dalam versinya, baik dari segi jadwal maupun produk. IIS adalah bagian dari Windows dan kerangka kerja .NET dapat dibuat versinya secara independen, sebagai bagian dari rilis Visual Studio.
Di direktori konten web, mungkin ada file web.config opsional yang mengontrol perilaku untuk tingkat hierarki dan ke bawahnya. Mereka bisa lokal atau jarak jauh (jika direktori konten berada di berbagi UNC, misalnya). Mereka mungkin berisi IIS, ASP.NET atau pengaturan konfigurasi .NET framework lainnya yang dapat ditentukan pada tingkatnya. Secara default tidak ada file web.config.
Dalam hal hierarki pewarisan, file akar machine.config, lalu web.config pada direktori yang sama (disebut sebagai web.configroot ), lalu applicationHost.config, lalu file web.config opsional di sepanjang namespace.
Konfigurasi mencakup file
Dalam beberapa kasus, berguna untuk memiliki file web.config menyertakan beberapa file .config lainnya. Ini dapat dilakukan dengan menggunakan atribut configSource. Saat ini terbatas pada jalur fisik relatif dalam sub-direktori, karena alasan keamanan (yaitu file A hanya dapat menyertakan file B jika B berada dalam subdirektori fisik A). Berikut adalah contoh dasar yang menunjukkan cara menggunakan configSource:
<!-- in inetsrv\applicationHost.config -->
<configuration>
<system.webServer>
<!-- mimemaps moved by the customer to a different file -->
<!-- so that this file is shorter and more readable -->
<staticContent configSource="staticContent.config"/>
<!-- the rest of system.webServer sections are here… -->
</system.webServer>
</configuration>
<!-- in inetsrv\staticContent.config -->
<configuration>
<system.webServer>
<staticContent>
<!-- all the mimemap definitions are here -->
<mimeMap ….. />
<mimeMap ….. />
<mimeMap ….. />
</staticContent>
</system.webServer>
</configuration>
Dalam contoh ini, pelanggan ingin memindahkan konten bagian staticContent ke file terpisah, agar lebih pendek, lebih mudah dibaca, applicationHost.config.
Perhatikan bahwa ketika pengaturan konfigurasi berubah dalam file .config, server akan secara otomatis mengambil perubahan dan bertindak pada file tersebut. Pelanggan tidak perlu khawatir tentang mendaur ulang aplikasi atau kumpulan aplikasi atau seluruh server (server itu sendiri dapat mendaur ulang kumpulan aplikasi, misalnya, tergantung pada pengaturan konfigurasi apa yang diubah).
Organisasi Pengaturan
Dalam file konfigurasi (yaitu untuk tingkat hierarki tertentu), pengaturan diatur secara terstruktur, dan bukan sebagai daftar datar. Unit dasar penyebaran, pendaftaran, dan ekstensibilitas adalah bagian konfigurasi. Bagian terkandung dalam grup bagian, yang pada gilirannya mungkin terkandung dalam grup bagian induk. Bagian itu sendiri tidak bersarang. Grup bagian adalah.
Berikut adalah contoh dari applicationHost.config:
<!-- section group for web server configuration -->
<system.webServer>
<!-- section group for web server security configuration -->
<security>
<!-- section group for web server authentication configuration -->
<authentication>
<!-- three sections for authentication -->
<basicAuthentcation ... />
<windowsAutnentication ... />
<anonymousAuthentication ... />
</authentication>
</security>
</system.webServer>
Pengaturan konfigurasi selalu termasuk dalam bagian tertentu.
Grup bagian hanya ada untuk penataan yang lebih baik; mereka tidak memiliki pengaturan langsung di dalamnya, hanya bagian.
Dalam bagian, strukturnya adalah sebagai berikut:
- Elemen konfigurasi: Berisi pengaturan konfigurasi dan kemungkinan elemen konfigurasi lainnya. Diwakili sebagai elemen XML. Bagian juga merupakan elemen.
- Koleksi konfigurasi: Contoh privat dari elemen konfigurasi, yang berisi daftar elemen konfigurasi, dalam bentuk add/remove/clear (yang disebut arahan koleksi). Diwakili sebagai elemen XML dengan <tambahkan>, <hapus>, <hapus> sub-elemen.
- Properti konfigurasi: ini adalah pengaturan konfigurasi [daun]. Diwakili sebagai atribut XML.
Berikut adalah contoh dari applicationHost.config:
<!-- "windowsAuthentcation" is a section which is an element -->
<!-- "enabled" is a property -->
<windowsAuthentication enabled="true">
<!-- "providers" is a collection which is an element -->
<providers>
<!-- the collection contains two elements -->
<!-- "add" is the collection directive; "value" is the property -->
<add value="Negotiate"/>
<add value=""NTLM/>
</providers>
</windowsAuthentication>
Secara default, applicationHost.config berisi dua grup bagian utama: system.applicationHost dan system.webServer. Ini juga berisi bagian yang disebut <configSections>, yang agak istimewa karena digunakan secara internal oleh sistem konfigurasi untuk mendaftarkan semua bagian lainnya.
Secara default, machine.config berisi beberapa grup bagian. Pengaturan ASP.NET berada di grup bagian system.web.
Tag Lokasi Vs. File Konfigurasi
Dalam banyak kasus, diinginkan untuk menghindari file web.config di direktori konten, tetapi tetap memiliki konfigurasi khusus URL yang menggantikan default global. Misalnya: administrator ingin menentukan bahwa situs tertentu harus menggunakan beberapa skema autentikasi, dan administrator situs (dan pengembang aplikasi di situs tersebut) tidak boleh menonaktifkannya.
Cara termampu untuk mencapainya adalah dengan menggunakan tag lokasi. Ini adalah mekanisme untuk menetapkan konfigurasi bagi jalur khusus, tanpa memiliki web.config di folder yang dipetakan ke jalur virtual.
Contoh ini menunjukkan bagaimana tag lokasi digunakan dalam applicationHost.config:
<!-- the following will take effect on MyAdminSite -->
<location path="MyAdminSite">
<system.webServer>
<security>
<authentication>
<basicAuthentication enabled="false"/>
<windowsAuthentication enabled="true"/>
<anonymousAuthentication enabled="false"/>
</authentication>
</security>
</system.webServer>
</location>
Tag lokasi dapat digunakan untuk menentukan konfigurasi untuk tingkat global (path="."), untuk situs, atau untuk jalur tertentu di dalam situs. Mungkin ada beberapa tag lokasi dalam file. Tag lokasi dapat berada di file .config apa pun, tidak hanya applicationHost.config atau machine.config.
Tag lokasi juga dapat digunakan untuk mengunci dan membuka kunci bagian. Detail selengkapnya tentang ini di lab penguncian konfigurasi.
Dalam beberapa kasus, tidak ada alternatif untuk menggunakan tag lokasi:
- Dua atau beberapa jalur virtual dipetakan ke folder fisik yang sama. Jelas, jika dua jalur virtual memiliki konfigurasi yang berbeda, jalur tersebut tidak dapat ditentukan dalam file web.config karena dibagikan.
- Konfigurasi khusus file. Tidak ada file web.config untuk file; hanya untuk seluruh folder.
Ringkasan
Dokumen ini memberikan gambaran umum awal, tingkat tinggi dari sistem konfigurasi di IIS 7.0 ke atas. Ini menyoroti format skema yang lebih bersih; sifat terdistribusi dari sistem konfigurasi dan cara mengaktifkan delegasi pengaturan konfigurasi kepada pemilik situs atau pengembang aplikasi; organisasi pengaturan terstruktur dalam file konfigurasi; dan integrasi antara IIS dan sistem konfigurasi ASP.NET.
Untuk informasi selengkapnya, disarankan untuk meninjau sisa dokumen konfigurasi, dan khususnya, dokumen Intrinsik Konfigurasi, yang masuk ke detail tingkat yang lebih rendah tentang sistem, termasuk desain dan arsitekturnya.