Bagikan melalui


Host ASP.NET Core di Windows dengan IIS

Catatan

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Penting

Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.

Internet Information Services (IIS) adalah Server Web yang fleksibel, aman, dan dapat dikelola untuk menghosting aplikasi web, termasuk ASP.NET Core.

Platform yang didukung

Sistem operasi berikut didukung:

  • Windows 7 atau yang lebih baru
  • Windows Server 2012 R2 atau versi lebih baru

Aplikasi yang diterbitkan untuk penyebaran 32-bit (x86) atau 64-bit (x64) didukung. Sebarkan aplikasi 32-bit dengan .NET Core SDK 32-bit (x86), kecuali aplikasi:

  • Memerlukan ruang alamat memori virtual yang lebih besar yang tersedia untuk aplikasi 64-bit.
  • Membutuhkan ukuran tumpukan IIS yang lebih besar.
  • Memiliki dependensi native 64-bit.

Memasang ASP.NET Core Module/Hosting Bundle

Unduh penginstal terbaru menggunakan tautan berikut:

Alat penginstal .NET Core Hosting Bundle saat ini (unduh langsung)

Untuk petunjuk detail selengkapnya tentang cara memasang ASP.NET Core Module, atau memasang versi yang berbeda, lihat Memasang .NET Core Hosting Bundle.

Untuk mengunduh versi bundel hosting sebelumnya, lihat masalah GitHub ini.

Memulai

Untuk mulai menghosting situs web di IIS, lihat panduan memulai kami.

Untuk mulai menghosting situs web di Azure App Service, lihat panduan penyebaran ke Azure App Service kami.

Konfigurasi

Untuk panduan konfigurasi, lihat Konfigurasi tingkat lanjut.

Sumber daya penyebaran untuk administrator IIS

Daur ulang yang tumpang tindih

Secara umum, sebaiknya gunakan pola seperti penyebaran biru-hijau untuk penyebaran tanpa waktu henti. Fitur seperti Daur Ulang yang Tumpang Tindih akan membantu, tetapi tidak akan menjamin bahwa Anda dapat melakukan penyebaran tanpa waktu henti. Untuk informasi lebih lanjut, lihat masalah GitHub ini.

Sertifikat klien opsional

Untuk informasi tentang aplikasi yang harus melindungi subset aplikasi dengan sertifikat, lihat Sertifikat klien opsional.

Sumber Daya Tambahan:

Untuk pengalaman tutorial tentang menerbitkan aplikasi ASP.NET Core ke server IIS, lihat Menerbitkan aplikasi ASP.NET Core ke IIS.

Memasang .NET Core Hosting Bundle

Sistem operasi yang didukung

Sistem operasi berikut didukung:

  • Windows 7 atau yang lebih baru
  • Windows Server 2012 R2 atau versi lebih baru

Server HTTP.sys (sebelumnya disebut WebListener) tidak berfungsi dalam konfigurasi proksi terbalik dengan IIS. Gunakan server Kestrel.

Untuk informasi tentang hosting di Azure, lihat Menyebarkan aplikasi ASP.NET Core ke Azure App Service.

Untuk panduan pemecahan masalah, lihat Memecahkan masalah dan mendebug proyek ASP.NET Core.

Platform yang didukung

Aplikasi yang diterbitkan untuk penyebaran 32-bit (x86) atau 64-bit (x64) didukung. Sebarkan aplikasi 32-bit dengan .NET Core SDK 32-bit (x86), kecuali aplikasi:

  • Memerlukan ruang alamat memori virtual yang lebih besar yang tersedia untuk aplikasi 64-bit.
  • Membutuhkan ukuran tumpukan IIS yang lebih besar.
  • Memiliki dependensi native 64-bit.

Aplikasi yang diterbitkan untuk 32-bit (x86) harus memiliki 32-bit yang diaktifkan untuk Kelompok Aplikasi IIS mereka. Untuk informasi lebih lanjut, lihat bagian Membuat situs IIS.

Gunakan 64-bit (x64) .NET Core SDK untuk menerbitkan aplikasi 64-bit. Runtime bahasa umum 64-bit harus ada di sistem host.

Model Hosting

Model hosting dalam proses

Menggunakan hosting dalam proses, aplikasi ASP.NET Core berjalan dalam proses yang sama dengan proses pekerja IIS-nya. Hosting dalam proses memberikan peningkatan performa jika dibandingkan dengan hosting di luar proses karena permintaan tidak diproksikan melalui adapter loopback, antarmuka jaringan yang mengembalikan lalu lintas jaringan keluar kembali ke mesin yang sama. IIS menangani manajemen proses dengan Windows Process Activation Service (WAS).

ASP.NET Core Module:

  • Melakukan inisialisasi aplikasi.
    • Memuat CoreCLR.
    • Panggilan Program.Main.
  • Menangani masa pakai permintaan native IIS.

Diagram berikut mengilustrasikan hubungan antara IIS, ASP.NET Core Module, dan aplikasi yang dihosting dalam proses:

ASP.NET Core Module di skenario hosting dalam proses

  1. Permintaan datang dari web ke driver HTTP.sys mode kernel.
  2. Driver merutekan permintaan native ke IIS pada port situs web yang dikonfigurasi, biasanya 80 (HTTP) atau 443 (HTTPS).
  3. ASP.NET Core Module menerima permintaan native dan meneruskannya ke Server HTTP IIS (IISHttpServer). Server HTTP IIS adalah implementasi server dalam proses untuk IIS yang mengubah permintaan dari native menjadi terkelola.

Setelah Server HTTP IIS memproses permintaan:

  1. Permintaan dikirim ke alur middleware ASP.NET Core.
  2. Alur middleware menangani permintaan dan meneruskannya sebagai instans HttpContext ke logika aplikasi.
  3. Respons aplikasi diteruskan kembali ke IIS melalui Server HTTP IIS.
  4. IIS mengirimkan respons ke klien yang menginisiasi permintaan.

Hosting dalam proses adalah keikutsertaan untuk aplikasi yang sudah ada. Template web ASP.NET Core menggunakan model hosting dalam proses.

CreateDefaultBuilder menambahkan instans IServer dengan memanggil metode UseIIS untuk mem-boot CoreCLR dan menghosting aplikasi di dalam proses pekerja IIS (w3wp.exe atau iisexpress.exe). Pengujian performa menunjukkan bahwa menghosting aplikasi .NET Core dalam proses memberikan throughput permintaan yang jauh lebih tinggi dibandingkan dengan menghosting aplikasi di luar proses dan melakukan proksi permintaan ke Kestrel.

Aplikasi yang diterbitkan sebagai satu file yang dapat dieksekusi tidak dapat dimuat oleh model hosting dalam proses.

Model hosting di luar proses

Karena aplikasi ASP.NET Core berjalan dalam proses yang terpisah dari proses pekerja IIS, ASP.NET Core Module menangani manajemen proses. Modul memulai proses untuk aplikasi ASP.NET Core ketika permintaan pertama tiba dan memulai ulang aplikasi jika aplikasi dimatikan atau mengalami crash. Ini pada dasarnya merupakan perilaku yang sama seperti yang terlihat pada aplikasi yang berjalan dalam proses yang dikelola oleh Windows Process Activation Service (WAS).

Diagram berikut mengilustrasikan hubungan antara IIS, ASP.NET Core Module, dan aplikasi yang dihosting di luar proses:

ASP.NET Core Module dalam skenario hosting di luar proses

  1. Permintaan datang dari web ke driver HTTP.sys mode kernel.
  2. Driver merutekan permintaan ke IIS di port situs web yang dikonfigurasi. Port yang dikonfigurasi biasanya 80 (HTTP) atau 443 (HTTPS).
  3. Modul meneruskan permintaan ke Kestrel pada port acak untuk aplikasi. Port acak bukan 80 atau 443.

ASP.NET Core Module menentukan port melalui variabel lingkungan saat startup. Ekstensi UseIISIntegration mengonfigurasi server yang akan didengarkan di http://localhost:{PORT}. Pemeriksaan tambahan dilakukan, dan permintaan yang tidak berasal dari modul ditolak. Modul tidak mendukung penerusan HTTPS. Permintaan diteruskan melalui HTTP meski permintaan diterima oleh IIS melalui HTTPS.

Setelah Kestrel mengambil permintaan dari modul, permintaan diteruskan ke alur middleware ASP.NET Core. Alur middleware menangani permintaan dan meneruskannya sebagai instans HttpContext ke logika aplikasi. Middleware yang ditambahkan oleh Integrasi IIS memperbarui skema, IP jarak jauh, dan basis jalur ke akun untuk meneruskan permintaan ke Kestrel. Respons aplikasi diteruskan kembali ke IIS, yang meneruskannya kembali ke klien HTTP yang menginisiasi permintaan.

Untuk panduan konfigurasi ASP.NET Core Module, lihat ASP.NET Core Module (ANCM) untuk IIS.

Untuk informasi lebih lanjut tentang hosting, lihat Menghosting di ASP.NET Core.

Konfigurasi aplikasi

Mengaktifkan komponen IISintegration

Saat membangun host di CreateHostBuilder (Program.cs), panggil CreateDefaultBuilder untuk mengaktifkan integrasi IIS:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Untuk informasi lebih lanjut tentang CreateDefaultBuilder, lihat Host Generik .NET di ASP.NET Core.

Opsi IIS

Model hosting dalam proses

Untuk mengonfigurasi opsi Server IIS, sertakan konfigurasi layanan untuk IISServerOptions di ConfigureServices. Contoh berikut menonaktifkan AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
Opsi Default Pengaturan
AutomaticAuthentication true Jika true, Server IIS mengatur HttpContext.User yang diautentikasi oleh Autentikasi Windows. Jika false, server hanya menyediakan identity untuk HttpContext.User dan merespons tantangan ketika secara eksplisit diminta oleh AuthenticationScheme. Autentikasi Windows harus diaktifkan di IIS agar AutomaticAuthentication berfungsi. Untuk informasi lebih lanjut, lihat Autentikasi Windows.
AuthenticationDisplayName null Mengatur nama tampilan yang ditampilkan kepada pengguna di halaman masuk.
AllowSynchronousIO false Apakah I/O sinkron diizinkan untuk HttpContext.Request dan HttpContext.Response.
MaxRequestBodySize 30000000 Mendapatkan atau mengatur ukuran isi permintaan maksimum untuk HttpRequest. Perhatikan bahwa IIS sendiri memiliki batas maxAllowedContentLength yang akan diproses sebelum MaxRequestBodySize diatur di IISServerOptions. Mengubah MaxRequestBodySize tidak akan memengaruhi maxAllowedContentLength. Untuk meningkatkan maxAllowedContentLength, tambahkan entri di web.config untuk mengatur maxAllowedContentLength ke nilai yang lebih tinggi. Untuk detail selengkapnya, lihat Konfigurasi.

Model hosting di luar proses

Untuk mengonfigurasi opsi IIS, sertakan konfigurasi layanan untuk IISOptions di ConfigureServices. Contoh berikut mencegah aplikasi mengisi HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opsi Default Pengaturan
AutomaticAuthentication true Jika true, Middleware Integrasi IIS mengatur HttpContext.User yang diautentikasi oleh Autentikasi Windows. Jika false, middleware hanya menyediakan identity untuk HttpContext.User dan merespons tantangan ketika secara eksplisit diminta oleh AuthenticationScheme. Autentikasi Windows harus diaktifkan di IIS agar AutomaticAuthentication berfungsi. Untuk informasi lebih lanjut, lihat topik Autentikasi Windows.
AuthenticationDisplayName null Mengatur nama tampilan yang ditampilkan kepada pengguna di halaman masuk.
ForwardClientCertificate true Jika true dan header permintaan MS-ASPNETCORE-CLIENTCERT ada, HttpContext.Connection.ClientCertificate akan terisi.

Skenario server proksi dan penyeimbang beban

Middleware Integrasi IIS dan ASP.NET Core Module dikonfigurasi untuk meneruskan:

  • Skema (HTTP/HTTPS).
  • Alamat IP jarak jauh tempat permintaan berasal.

Middleware Integrasi IIS mengonfigurasi Middleware Header yang Diteruskan.

Konfigurasi tambahan mungkin diperlukan untuk aplikasi yang dihosting di belakang server proksi tambahan dan penyeimbang beban. Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proxy dan memuat penyeimbang.

File web.config

File web.config mengonfigurasi ASP.NET Core Module. Membuat, mengubah, dan menerbitkan file web.config ditangani oleh target MSBuild (_TransformWebConfig) saat proyek diterbitkan. Target ini ada di target Web SDK (Microsoft.NET.Sdk.Web). SDK diatur di bagian atas file proyek:

<Project Sdk="Microsoft.NET.Sdk.Web">

Jika file web.config tidak ada dalam proyek, file dibuat dengan processPath dan arguments yang benar untuk mengonfigurasi ASP.NET Core Module dan dipindahkan ke output yang diterbitkan.

Jika file web.config ada dalam proyek, file diubah dengan processPath dan arguments yang benar untuk mengonfigurasi ASP.NET Core Module dan dipindahkan ke output yang diterbitkan. Transformasi tidak mengubah pengaturan konfigurasi IIS dalam file.

File web.config mungkin menyediakan pengaturan konfigurasi IIS tambahan yang mengontrol modul IIS aktif. Untuk informasi tentang modul IIS yang mampu memproses permintaan dengan aplikasi ASP.NET Core, lihat topik modul IIS.

Untuk mencegah agar Web SDK tidak mengubah file web.config, gunakan properti <IsTransformWebConfigDisabled> dalam file proyek:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Saat menonaktifkan Web SDK agar tidak mengubah file, processPath dan arguments harus diatur secara manual oleh pengembang. Untuk informasi lebih lanjut, lihat ASP.NET Core Module (ANCM) untuk IIS.

Lokasi file web.config

Untuk menyiapkan ASP.NET Core Module dengan benar, file web.config harus ada di jalur akar konten (biasanya jalur dasar aplikasi) dari aplikasi yang diterapkan. Ini adalah lokasi yang sama dengan jalur fisik situs web yang disediakan untuk IIS. File web.config diperlukan di akar aplikasi untuk memungkinkan penerbitan beberapa aplikasi menggunakan Web Deploy.

File sensitif ada di jalur fisik aplikasi, seperti {ASSEMBLY}.runtimeconfig.json, {ASSEMBLY}.xml (komentar Dokumentasi XML), dan {ASSEMBLY}.deps.json, di mana tempat penampung {ASSEMBLY} adalah nama rakitannya. Saat file web.config ada dan situs dimulai secara normal, IIS tidak menyajikan file sensitif ini jika diminta. Jika file web.config tidak ada, salah diberi nama, atau tidak dapat mengonfigurasi situs untuk startup normal, IIS mungkin menyajikan file sensitif secara publik.

File web.config harus selalu ada dalam penyebaran, diberi nama dengan benar, dan dapat mengonfigurasi situs untuk startup yang normal. Jangan pernah menghapus file web.config dari penyebaran produksi.

Mengubah web.config

Jika Anda perlu mengubah web.config saat penerbitan, lihat Mengubah web.config. Anda mungkin perlu mengubah web.config saat penerbitan untuk mengatur variabel lingkungan berdasarkan konfigurasi, profil, atau lingkungan.

Konfigurasi IIS

Sistem Operasi Windows Server

Aktifkan peran server Server Web (IIS) dan buat layanan peran.

  1. Gunakan wizard Tambahkan Peran dan Fitur dari menu Kelola atau tautan di Pengelola Server. Pada langkah Peran Server, centang kotak untuk Server Web (IIS).

    Peran IIS Server Web dipilih di langkah Pilih peran server.

  2. Setelah langkah Fitur, langkah Layanan peran akan dimuat untuk Server Web (IIS). Pilih layanan peran IIS yang diinginkan atau terima layanan peran default yang disediakan.

    Layanan peran default dipilih di langkah Pilih layanan peran.

    Autentikasi Windows (Opsional)
    Untuk mengaktifkan Autentikasi Windows, luaskan node berikut: Server Web>Keamanan. Pilih fitur Autentikasi Windows. Untuk informasi lebih lanjut, lihat Autentikasi Windows <windowsAuthentication> dan Mengonfigurasi autentikasi Windows.

    WebSocket (Opsional)
    WebSocket didukung dengan ASP.NET Core 1.1 atau yang lebih baru. Untuk mengaktifkan WebSocket, perluas node berikut: Server Web>Pengembangan Aplikasi. Pilih fitur Protokol WebSocket. Untuk informasi lebih lanjut, lihat WebSocket.

  3. Lanjutkan ke langkah Konfirmasi untuk memasang peran dan layanan server web. Tindakan mulai ulang server/IIS tidak diperlukan setelah memasang peran Server Web (IIS).

Sistem operasi desktop Windows

Aktifkan IIS Management Console dan Layanan W3.

  1. Buka Panel Kontrol>Program>Program dan Fitur>Aktifkan atau nonaktifkan fitur Windows (sisi kiri layar).

  2. Buka node Internet Information Services. Buka node Alat Manajemen Web.

  3. Centang kotak untuk IIS Management Console.

  4. Centang kotak untuk Layanan W3.

  5. Terima fitur default untuk Layanan W3 atau kustomisasi fitur IIS.

    Autentikasi Windows (Opsional)
    Untuk mengaktifkan Autentikasi Windows, luaskan node berikut: Layanan W3>Keamanan. Pilih fitur Autentikasi Windows. Untuk informasi lebih lanjut, lihat Autentikasi Windows <windowsAuthentication> dan Mengonfigurasi autentikasi Windows.

    WebSocket (Opsional)
    WebSocket didukung dengan ASP.NET Core 1.1 atau yang lebih baru. Untuk mengaktifkan WebSocket, luaskan node berikut: Layanan W3>Fitur Pengembangan Aplikasi. Pilih fitur Protokol WebSocket. Untuk informasi lebih lanjut, lihat WebSocket.

  6. Jika penginstalan IIS memerlukan tindakan mulai ulang, mulai ulang sistem.

IIS Management Console dan Layanan W3 dipilih di Fitur Windows.

Memasang .NET Core Hosting Bundle

Pasang .NET Core Hosting Bundle pada sistem hosting. Bundel memasang .NET Core Runtime, .NET Core Library, dan ASP.NET Core Module. Modul ini memungkinkan aplikasi ASP.NET Core berjalan di belakang IIS.

Penting

Jika Hosting Bundle dipasang sebelum IIS, penginstalan bundel harus diperbaiki. Jalankan lagi alat penginstal Hosting Bundle setelah memasang IIS.

Jika Hosting Bundle dipasang setelah memasang versi 64-bit (x64) .NET Core, SDK mungkin tampak tidak ada (Tidak ada .NET Core SDK yang terdeteksi). Untuk mengatasi masalah tersebut, lihat Memecahkan masalah dan mendebug proyek ASP.NET Core.

Unduhan langsung (versi saat ini)

Unduh alat penginstal menggunakan tautan berikut:

Alat penginstal .NET Core Hosting Bundle saat ini (unduh langsung)

Versi alat penginstal sebelumnya

Untuk mendapatkan versi alat penginstal sebelumnya:

  1. Buka halaman Unduh .NET Core.
  2. Pilih versi .NET Core yang diinginkan.
  3. Di kolom Jalankan aplikasi - Runtime bahasa umum, temukan baris versi runtime bahasa umum .NET Core yang diinginkan.
  4. Unduh alat penginstal menggunakan tautan Hosting Bundle.

Peringatan

Beberapa alat penginstal berisi versi rilis yang telah mencapai akhir masa pakainya (EOL) dan tidak lagi didukung oleh Microsoft. Untuk informasi lebih lanjut, lihat kebijakan dukungan.

Memasang Hosting Bundle

  1. Jalankan alat penginstal di server. Parameter berikut tersedia saat menjalankan alat penginstal dari shell perintah administrator:

    • OPT_NO_ANCM=1:Lewati penginstalan ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: Lewati penginstalan runtime bahasa umum .NET Core. Digunakan saat server hanya menghosting penyebaran mandiri (SCD).
    • OPT_NO_SHAREDFX=1: Lewati penginstalan ASP.NET Shared Framework (runtime bahasa umum ASP.NET). Digunakan saat server hanya menghosting penyebaran mandiri (SCD).
    • OPT_NO_X86=1: Lewati penginstalan runtime bahasa umum x86. Gunakan parameter ini ketika Anda tahu bahwa Anda tidak akan menghosting aplikasi 32-bit. Jika ada kemungkinan Anda akan menghosting aplikasi 32-bit dan 64-bit di masa mendatang, jangan gunakan parameter ini dan pasang kedua runtime bahasa umum.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Nonaktifkan pemeriksaan untuk menggunakan Konfigurasi Bersama IIS saat konfigurasi bersama (applicationHost.config) berada di mesin yang sama dengan penginstalan IIS. Hanya tersedia untuk alat penginstal Hosting Bundler ASP.NET Core 2.2 atau yang lebih baru. Untuk informasi lebih lanjut, lihat ASP.NET Core Module (ANCM) untuk IIS.
  2. Tindakan memulai ulang IIS akan mengambil perubahan pada sistem PATH, yang merupakan variabel lingkungan, yang dibuat oleh alat penginstal. Untuk memulai ulang server web, hentikan Windows Process Activation Service (WAS) dan kemudian mulai ulang World Wide Web Publishing Service (W3SVC). Mulai ulang sistem atau jalankan perintah berikut di shell perintah yang ditingkatkan:

    net stop was /y
    net start w3svc
    

ASP.NET Core tidak mengadopsi perilaku roll-forward untuk rilis patch dari paket kerangka kerja bersama. Setelah meningkatkan kerangka kerja bersama dengan memasang bundel hosting baru, mulai ulang sistem atau jalankan perintah berikut di shell perintah yang ditingkatkan:

net stop was /y
net start w3svc

Catatan

Untuk informasi tentang Konfigurasi Bersama IIS, lihat ASP.NET Core Module dengan Konfigurasi Bersama IIS.

Memasang Web Deploy saat menerbitkan dengan Visual Studio

Saat menyebarkan aplikasi ke server dengan Web Deploy, pasang versi terbaru Web Deploy di server. Untuk menginstal Web Deploy, gunakan Web Platform Installer (WebPI) atau lihat Unduhan IIS: Web Deploy. Metode pilihannya adalah menggunakan WebPI. WebPI menawarkan penyiapan mandiri dan konfigurasi untuk penyedia hosting.

Membuat situs IIS

  1. Pada sistem hosting, buat folder untuk memuat folder dan file aplikasi yang diterbitkan. Pada langkah berikut, jalur folder disediakan ke IIS sebagai jalur fisik ke aplikasi. Untuk informasi lebih lanjut tentang folder penyebaran dan tata letak file aplikasi, lihat Struktur direktori ASP.NET Core.

  2. Di Manajer IIS, buka node server di panel Koneksi. Klik kanan folder Situs. Pilih Tambahkan Situs Web dari menu kontekstual.

  3. Berikan Nama situs dan atur Jalur fisik ke folder penyebaran aplikasi. Berikan konfigurasi Pengikatan dan buat situs web dengan memilih Oke:

    Berikan Nama situs, jalur fisik, dan Nama host di langkah Tambahkan Situs Web.

    Peringatan

    Pengikatan wildcard tingkat atas (http://*:80/ dan http://+:80) tidak boleh digunakan. Pengikatan wildcard tingkat atas dapat mengekspos aplikasi Anda terhadap kerentanan keamanan. Ini berlaku untuk wildcard kuat dan lemah. Gunakan nama host eksplisit alih-alih wildcard. Pengikatan wildcard subdomain (misalnya, *.mysub.com) tidak memiliki risiko keamanan ini jika Anda mengontrol seluruh domain induk (alih-alih *.com, yang rentan). Lihat RFC 9110: Semantik HTTP (Bagian 7.2: Host dan :otoritas) untuk informasi selengkapnya.

  4. Di bawah node server, pilih Kelompok Aplikasi.

  5. Klik kanan kelompok aplikasi situs dan pilih Pengaturan Dasar dari menu kontekstual.

  6. Di jendela Edit Kelompok Aplikasi, atur Versi .NET CLR ke Tanpa Kode Aman:

    Atur Tanpa Kode Aman untuk versi .NET CLR.

    ASP.NET Core berjalan dalam proses terpisah dan mengelola runtime bahasa umum. ASP.NET Core tidak bergantung pada pemuatan CLR desktop (.NET CLR). Core Common Language Runtime (CoreCLR) untuk .NET Core di-boot untuk menghosting aplikasi dalam proses pekerja. Mengatur Versi .NET CLR ke Tanpa Kode Aman sifatnya opsional tetapi disarankan.

  7. ASP.NET Core 2.2 atau yang lebih baru:

    • Untuk penyebaran mandiri 32-bit (x86) yang diterbitkan dengan SDK 32-bit yang menggunakan model hosting dalam proses, aktifkan Kelompok Aplikasi untuk 32-bit. Di Manajer IIS, buka Kelompok Aplikasi di bilah sisi Koneksi. Pilih Kelompok Aplikasi dari aplikasi. Di bilah sisi Tindakan, pilih Pengaturan Tingkat Lanjut. Atur Aktifkan Aplikasi 32-Bit ke True.

    • Untuk penyebaran mandiri 64-bit (x64) yang menggunakan model hosting dalam proses, nonaktifkan kelompok aplikasi untuk proses 32-bit (x86). Di Manajer IIS, buka Kelompok Aplikasi di bilah sisi Koneksi. Pilih Kelompok Aplikasi dari aplikasi. Di bilah sisi Tindakan, pilih Pengaturan Tingkat Lanjut. Atur Aktifkan Aplikasi 32-Bit ke False.

  8. Konfirmasikan model identity proses memiliki izin yang tepat.

    Jika default identity kumpulan aplikasi (ModelIdentity> Proses) diubah dari ApplicationPoolIdentity ke yang lainidentity, verifikasi bahwa yang baru identity memiliki izin yang diperlukan untuk mengakses folder aplikasi, database, dan sumber daya lain yang diperlukan. Misalnya, kelompok aplikasi memerlukan akses baca dan tulis ke folder tempat aplikasi membaca dan menulis file.

Konfigurasi Autentikasi Windows (Opsional)
Untuk informasi lebih lanjut, lihat Mengonfigurasi autentikasi Windows.

Menyebarkan aplikasi

Sebarkan aplikasi ke folder Jalur fisik IIS yang dibuat di bagian Membuat situs IIS. Web Deploy adalah mekanisme yang disarankan untuk penyebaran, tetapi ada beberapa opsi untuk memindahkan aplikasi dari folder publish proyek ke folder penyebaran sistem hosting.

Web Deploy dengan Visual Studio

Lihat topik Profil penerbitan Visual Studio untuk penyebaran aplikasi ASP.NET Core guna mempelajari cara membuat profil penerbitan untuk digunakan dengan Web Deploy. Jika penyedia hosting menyediakan Profil Penerbitan atau dukungan untuk membuatnya, unduh profil mereka dan impor menggunakan dialog Terbitkan Visual Studio:

Halaman dialog terbitkan

Web Deploy di luar Visual Studio

Web Deploy juga dapat digunakan di luar Visual Studio dari baris perintah. Untuk informasi lebih lanjut, lihat Alat Web Deployment.

Alternatif untuk Web Deploy

Gunakan salah satu dari beberapa metode untuk memindahkan aplikasi ke sistem hosting, seperti salinan manual, Xcopy, Robocopy, atau PowerShell.

Untuk informasi lebih lanjut tentang penyebaran ASP.NET Core ke IIS, lihat bagian Sumber daya penyebaran untuk administrator IIS.

Telusuri situs web

Setelah aplikasi disebarkan ke sistem hosting, buat permintaan ke salah satu titik akhir publik aplikasi.

Dalam contoh berikut, situs terikat ke nama Host IIS di Port 80.www.mysite.com Permintaan dibuat untuk http://www.mysite.com:

Browser Microsoft Edge telah memuat halaman startup IIS.

File penyebaran yang dikunci

File dalam folder penyebaran dikunci saat aplikasi sedang berjalan. File yang dikunci tidak dapat ditimpa selama penyebaran. Untuk merilis file yang dikunci dalam penyebaran, hentikan kelompok aplikasi menggunakan salah satu pendekatan berikut:

  • Gunakan Web Deploy dan referensikan ke Microsoft.NET.Sdk.Web dalam file proyek. File app_offline.htm ditempatkan di akar direktori aplikasi web. Jika file ada, ASP.NET Core Module akan dengan lancar mematikan aplikasi dan menyajikan file app_offline.htm selama penyebaran. Untuk informasi lebih lanjut, lihat Referensi konfigurasi ASP.NET Core Module.

  • Hentikan kelompok aplikasi secara manual di Manajer IIS di server.

  • Gunakan PowerShell untuk menghilangkan app_offline.htm (memerlukan PowerShell 5 atau yang lebih baru):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    

Perlindungan data

Tumpukan ASP.NET Core Data Protection digunakan oleh beberapa middleware ASP.NET Core, termasuk middleware yang digunakan dalam autentikasi. Meskipun API Perlindungan Data tidak dipanggil oleh kode pengguna, perlindungan data harus dikonfigurasi dengan skrip penyebaran atau dalam kode pengguna untuk membuat penyimpanan kunci kriptografik yang persisten. Jika perlindungan data tidak dikonfigurasi, kunci disimpan di memori dan dibuang saat aplikasi dimulai ulang.

Jika ring kunci disimpan dalam memori saat aplikasi dimulai ulang:

  • Semua token autentikasi berbasis cookie menjadi tidak valid.
  • Pengguna diminta untuk masuk lagi pada permintaan berikutnya.
  • Data apa pun yang dilindungi dengan ring kunci tidak dapat lagi didekripsi. Ini mungkin termasuk token CSRF dan cookie ASP.NET Core MVC TempData.

Untuk mengonfigurasi perlindungan data di bawah IIS guna mempertahankan ring kunci, gunakan salah satu pendekatan berikut:

  • Membuat Kunci Registri Perlindungan Data

    Kunci perlindungan data yang digunakan oleh aplikasi ASP.NET Core disimpan di registri di luar aplikasi. Untuk mempertahankan kunci untuk aplikasi tertentu, buat kunci registri untuk kelompok aplikasi.

    Untuk penginstalan IIS non-webfarm mandiri, skrip PowerShell Perlindungan Data Provision-AutoGenKeys.ps1 dapat digunakan untuk setiap kelompok aplikasi yang digunakan dengan aplikasi ASP.NET Core. Skrip ini membuat kunci registri di registri HKLM yang hanya dapat diakses oleh akun proses pekerja dari kelompok aplikasi dari aplikasi. Kunci dienkripsi saat rest menggunakan DPAPI dengan kunci di seluruh komputer.

    Dalam skenario farm web, aplikasi dapat dikonfigurasi untuk menggunakan jalur UNC untuk menyimpan ring kunci perlindungan datanya. Secara default, kunci perlindungan data tidak dienkripsi. Pastikan bahwa izin file untuk berbagi jaringan terbatas pada akun Windows tempat aplikasi berjalan. Sertifikat X509 dapat digunakan untuk melindungi kunci di rest. Pertimbangkan mekanisme untuk mengizinkan pengguna mengunggah sertifikat: Tempatkan sertifikat ke dalam penyimpanan sertifikat tepercaya pengguna dan pastikan sertifikat tersebut tersedia di semua mesin tempat aplikasi pengguna berjalan. Lihat Mengonfigurasi Perlindungan Data ASP.NET Core untuk detailnya.

  • Mengonfigurasikan Kelompok Aplikasi IIS untuk memuat profil pengguna

    Pengaturan ini ada di bagian Model Proses di bawah Pengaturan Tingkat Lanjut untuk kelompok aplikasi. Atur Muat Profil Pengguna ke True. Jika diatur ke True, kunci disimpan di direktori profil pengguna dan dilindungi menggunakan DPAPI dengan kunci khusus untuk akun pengguna. Kunci disimpan ke folder %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.

    Atribut setProfileEnvironment kelompok aplikasi juga harus diaktifkan. Nilai default setProfileEnvironment adalah true. Dalam beberapa skenario (misalnya, OS Windows), setProfileEnvironment diatur ke false. Jika kunci tidak disimpan di direktori profil pengguna seperti yang diharapkan:

    1. Buka folder %windir%/system32/inetsrv/config.
    2. Buka file applicationHost.config.
    3. Temukan <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> elemennya.
    4. Konfirmasikan bahwa atribut setProfileEnvironment tidak ada, yang membuat nilai diatur ke default true, atau secara eksplisit mengatur nilai atribut ke true.
  • Menggunakan sistem file sebagai penyimpanan ring kunci

    Sesuaikan kode aplikasi untuk menggunakan sistem file sebagai penyimpanan ring kunci. Gunakan sertifikat X509 untuk melindungi ring kunci dan pastikan sertifikat tersebut adalah sertifikat tepercaya. Jika sertifikat ditandatangani sendiri, letakkan sertifikat di penyimpanan Akar Tepercaya.

    Saat menggunakan IIS di farm web:

  • Mengatur kebijakan di seluruh mesin untuk perlindungan data

    Sistem perlindungan data memiliki dukungan terbatas guna mengatur kebijakan seluruh mesin default untuk semua aplikasi yang menggunakan API Perlindungan Data. Untuk informasi lebih lanjut, lihat Gambaran umum Perlindungan Data ASP.NET Core.

Direktori Virtual

Direktori Virtual IIS tidak didukung dengan aplikasi ASP.NET Core. Aplikasi dapat dihosting sebagai sub-aplikasi.

Sub-aplikasi

Aplikasi ASP.NET Core dapat dihosting sebagai sub-aplikasi (sub-apk) IIS. Jalur sub-aplikasi menjadi bagian dari URL aplikasi akar.

Tautan aset statis dalam sub-aplikasi harus menggunakan notasi tilde-slash (~/). Notasi tilde-slash memicu Pembantu Tag untuk menambahkan basis jalur sub-aplikasi ke tautan relatif yang dirender. Untuk sub-aplikasi di /subapp_path, gambar yang ditautkan dengan src="~/image.png" akan dirender sebagai src="/subapp_path/image.png". Middleware File Statis dari aplikasi akar tidak memproses permintaan file statis. Permintaan diproses oleh Middleware File Statis sub-aplikasi.

Jika atribut src aset statis diatur ke jalur absolut (misalnya, src="/image.png"), tautan akan dirender tanpa basis jalur sub-aplikasi. Middleware File Statis aplikasi akar mencoba menyajikan aset dari akar web aplikasi akar, yang menghasilkan respons 404 - Tidak Ditemukan, kecuali jika aset statis tersedia dari aplikasi akar.

Untuk menghosting aplikasi ASP.NET Core sebagai sub-aplikasi di bawah aplikasi ASP.NET Core lain:

  1. Buat kelompok aplikasi untuk sub-aplikasi. Atur Versi .NET CLR ke Tanpa Kode Aman karena Core Common Language Runtime (CoreCLR) untuk .NET Core di-boot untuk menghosting aplikasi dalam proses pekerja, bukan CLR desktop (.NET CLR).

  2. Tambahkan situs akar di Manajer IIS dengan sub-aplikasi di folder di bawah situs akar.

  3. Klik kanan folder sub-aplikasi di Manajer IIS dan pilih Konversikan ke Aplikasi.

  4. Dalam dialog Tambahkan Aplikasi, gunakan tombol Pilih untuk Kelompok Aplikasi guna menetapkan kelompok aplikasi yang Anda buat untuk sub-aplikasi. Pilih OK.

Penetapan kelompok aplikasi terpisah untuk sub-aplikasi adalah persyaratan saat menggunakan model hosting dalam proses.

Untuk informasi lebih lanjut tentang model hosting dalam proses dan mengonfigurasi ASP.NET Core Module, lihat ASP.NET Core Module (ANCM) untuk IIS.

Konfigurasi IIS dengan web.config

Konfigurasi IIS dipengaruhi oleh bagian <system.webServer> dari web.config untuk skenario IIS yang berfungsi untuk aplikasi ASP.NET Core dengan ASP.NET Core Module. Misalnya, konfigurasi IIS berfungsi untuk pemadatan dinamis. Jika IIS dikonfigurasi pada tingkat server untuk menggunakan pemadatan dinamis, elemen <urlCompression> dalam file web.config aplikasi dapat menonaktifkannya untuk aplikasi ASP.NET Core.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Untuk mengatur variabel lingkungan untuk masing-masing aplikasi yang berjalan di kelompok aplikasi yang terisolasi (didukung untuk IIS 10.0 atau yang lebih baru), lihat bagian perintah AppCmd.exe dari topik Variabel Lingkungan <environmentVariables> dalam dokumentasi referensi IIS.

Bagian yang tidak digunakan oleh ASP.NET Core

Bagian konfigurasi aplikasi ASP.NET di web.config tidak digunakan oleh aplikasi ASP.NET Core untuk konfigurasi:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Aplikasi ASP.NET Core dikonfigurasi menggunakan penyedia konfigurasi lain. Untuk informasi lebih lanjut, lihat Konfigurasi dan pengaturan konfigurasi run-time .NET Core

Kelompok Aplikasi

Isolasi kelompok aplikasi ditentukan oleh model hosting:

  • Hosting dalam proses: Aplikasi harus berjalan di kelompok aplikasi terpisah.
  • Hosting di luar proses: Sebaiknya isolasi aplikasi dari satu sama lain dengan menjalankan setiap aplikasi di kelompok aplikasinya masing-masing.

Dialog Tambahkan Situs Web IIS default ke kelompok aplikasi tunggal per aplikasi. Saat Nama situs diberikan, teks secara otomatis ditransfer ke kotak teks Kelompok aplikasi. Kelompok aplikasi baru dibuat menggunakan nama situs saat situs ditambahkan.

Identity Kelompok Aplikasi

Akun kumpulan identity aplikasi memungkinkan aplikasi berjalan di bawah akun unik tanpa harus membuat dan mengelola domain atau akun lokal. Pada IIS 8.0 atau yang lebih baru, Proses Pekerja Admin IIS (WAS) membuat akun virtual dengan nama kelompok aplikasi baru dan menjalankan proses pekerja kelompok aplikasi di bawah akun ini secara default. Di Konsol Manajemen IIS di bawah Pengaturan Tingkat Lanjut untuk kumpulan aplikasi, pastikan bahwa Identity diatur untuk menggunakan ApplicationPoolIdentity:

Dialog pengaturan tingkat lanjut kelompok aplikasi

Proses manajemen IIS membuat pengidentifikasi aman dengan nama kelompok aplikasi di Sistem Keamanan Windows. Sumber daya dapat diamankan menggunakan ini identity. Namun, ini identity bukan akun pengguna nyata dan tidak muncul di Konsol Manajemen Pengguna Windows.

Jika proses pekerja IIS memerlukan akses yang ditingkatkan ke aplikasi, ubah Daftar Kontrol Akses (ACL) untuk direktori yang berisi aplikasi:

  1. Buka Windows Explorer dan buka direktori.

  2. Klik kanan pada direktori dan pilih Properti.

  3. Di bawah tab Keamanan, pilih tombol Edit lalu tombol Tambahkan.

  4. Pilih tombol Lokasi dan pastikan sistem dipilih.

  5. Masukkan IIS AppPool\{APP POOL NAME}, di mana tempat penampung {APP POOL NAME} adalah nama kelompok aplikasi, di area Masukkan nama objek untuk memilih. Pilih tombol Periksa Nama. Untuk DefaultAppPool periksa nama menggunakan IIS AppPool\DefaultAppPool. Saat tombol Periksa Nama dipilih, nilai DefaultAppPool ditunjukkan di area nama objek. Tidak mungkin memasukkan nama kelompok aplikasi langsung ke area nama objek. Gunakan format IIS AppPool\{APP POOL NAME}, di mana tempat penampung {APP POOL NAME} adalah nama kelompok aplikasi, saat memeriksa nama objek.

    Dialog pilih pengguna atau grup untuk folder aplikasi: Nama kelompok aplikasi

  6. Pilih OK.

    Dialog pilih pengguna atau grup untuk folder aplikasi: Setelah memilih

  7. Izin baca & jalankan harus diberikan secara default. Berikan izin tambahan sesuai kebutuhan.

Akses juga dapat diberikan pada perintah menggunakan alat ICACLS. Menggunakan DefaultAppPool sebagai contoh, perintah berikut digunakan:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Untuk informasi lebih lanjut, lihat topik icacls.

Dukungan HTTP/2

HTTP/2 didukung dengan ASP.NET Core dalam skenario penyebaran IIS berikut:

  • Sedang dalam proses
    • Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
    • TLS 1.2 atau koneksi yang lebih baru
  • Di luar proses
    • Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
    • Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke server Kestrel menggunakan HTTP/1.1.
    • TLS 1.2 atau koneksi yang lebih baru

Untuk penyebaran dalam proses saat koneksi HTTP/2 dibuat, HttpRequest.Protocol melaporkan HTTP/2. Untuk penyebaran di luar proses saat koneksi HTTP/2 dibuat, HttpRequest.Protocol melaporkan HTTP/1.1.

Untuk informasi lebih lanjut tentang model hosting dalam proses dan di luar proses, lihat ASP.NET Core Module (ANCM) untuk IIS.

HTTP/2 diaktifkan secara default. Koneksi kembali ke HTTP/1.1 jika koneksi HTTP/2 tidak dibuat. Untuk informasi lebih lanjut tentang konfigurasi HTTP/2 dengan penyebaran IIS, lihat HTTP/2 di IIS.

Permintaan Preflight CORS

Bagian ini hanya berlaku untuk aplikasi ASP.NET Core yang menargetkan .NET Framework.

Untuk aplikasi ASP.NET Core yang menargetkan .NET Framework, permintaan OPTIONS tidak diteruskan ke aplikasi secara default di IIS. Untuk mempelajari cara mengonfigurasi penanganan IIS aplikasi di web.config guna meneruskan permintaan OPTIONS, lihat Mengaktifkan permintaan lintas-asal di ASP.NET Web API 2: Cara Kerja CORS.

Modul Inisialisasi Aplikasi dan Batas Waktu Menganggur

Ketika dihosting di IIS oleh ASP.NET Core Module versi 2:

Modul Inisialisasi Aplikasi

Berlaku untuk aplikasi yang dihosting dalam proses dan di luar proses.

Inisialisasi Aplikasi IIS adalah fitur IIS yang mengirimkan permintaan HTTP ke aplikasi saat kelompok aplikasi dimulai atau didaur ulang. Permintaan memicu aplikasi untuk dimulai. Secara default, IIS mengeluarkan permintaan ke URL akar aplikasi (/) untuk menginisialisasi aplikasi (lihat sumber daya tambahan untuk detail selengkapnya tentang konfigurasi).

Konfirmasikan bahwa fitur peran Inisialisasi Aplikasi IIS diaktifkan:

Pada sistem desktop Windows 7 atau yang lebih baru saat menggunakan IIS secara lokal:

  1. Buka Panel Kontrol>Program>Program dan Fitur>Aktifkan atau nonaktifkan fitur Windows (sisi kiri layar).
  2. Buka Internet Information Services>Layanan W3>Fitur Pengembangan Aplikasi.
  3. Pilih kotak centang untuk Inisialisasi Aplikasi.

Pada Windows Server 2008 R2 atau yang lebih baru:

  1. Buka Wizard Tambahkan Peran dan Fitur.
  2. Di panel Pilih layanan peran, buka node Pengembangan Aplikasi.
  3. Pilih kotak centang untuk Inisialisasi Aplikasi.

Gunakan salah satu dari pendekatan berikut untuk mengaktifkan Modul Inisialisasi Aplikasi untuk situs:

  • Dengan Manajer IIS:

    1. Pilih Kelompok Aplikasi di panel Koneksi.
    2. Klik kanan kelompok aplikasi milik aplikasi dalam daftar dan pilih Pengaturan Tingkat Lanjut.
    3. Mode Mulai default adalah OnDemand. Atur Mode Mulai ke AlwaysRunning. Pilih OK.
    4. Buka node Situs di panel Koneksi.
    5. Klik kanan aplikasi dan pilih Kelola Situs Web>Pengaturan Tingkat Lanjut.
    6. Pengaturan Muat Sebelumnya Diaktifkan default adalah False. Atur Muat Sebelumnya Diaktifkan ke True. Pilih OK.
  • Menggunakan web.config, tambahkan elemen <applicationInitialization> dengan doAppInitAfterRestart yang diatur ke true ke elemen <system.webServer> di file web.config` aplikasi:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Waktu Diam Habis

Hanya berlaku untuk aplikasi yang dihosting dalam proses.

Untuk mencegah aplikasi agar tidak menganggur, atur batas waktu menganggur kelompok aplikasi menggunakan Manajer IIS:

  1. Pilih Kelompok Aplikasi di panel Koneksi.
  2. Klik kanan kelompok aplikasi milik aplikasi dalam daftar dan pilih Pengaturan Tingkat Lanjut.
  3. Batas waktu menganggur (menit) default adalah 20 menit. Atur Batas waktu menganggur (menit) ke 0 (nol). Pilih OK.
  4. Daur ulang proses pekerja.

Untuk mencegah aplikasi yang dihosting di luar proses agar tidak dikenakan batas waktu, gunakan salah satu pendekatan berikut:

Modul Inisialisasi Aplikasi dan sumber daya tambahan Batas Waktu Menganggur

Sumber daya penyebaran untuk administrator IIS

Sumber Daya Tambahan:

Untuk pengalaman tutorial tentang menerbitkan aplikasi ASP.NET Core ke server IIS, lihat Menerbitkan aplikasi ASP.NET Core ke IIS.

Memasang .NET Core Hosting Bundle

Sistem operasi yang didukung

Sistem operasi berikut didukung:

  • Windows 7 atau yang lebih baru
  • Windows Server 2008 R2 atau yang lebih baru

Server HTTP.sys (sebelumnya disebut WebListener) tidak berfungsi dalam konfigurasi proksi terbalik dengan IIS. Gunakan server Kestrel.

Untuk informasi tentang hosting di Azure, lihat Menyebarkan aplikasi ASP.NET Core ke Azure App Service.

Untuk panduan pemecahan masalah, lihat Memecahkan masalah dan mendebug proyek ASP.NET Core.

Platform yang didukung

Aplikasi yang diterbitkan untuk penyebaran 32-bit (x86) atau 64-bit (x64) didukung. Sebarkan aplikasi 32-bit dengan .NET Core SDK 32-bit (x86), kecuali aplikasi:

  • Memerlukan ruang alamat memori virtual yang lebih besar yang tersedia untuk aplikasi 64-bit.
  • Membutuhkan ukuran tumpukan IIS yang lebih besar.
  • Memiliki dependensi native 64-bit.

Gunakan 64-bit (x64) .NET Core SDK untuk menerbitkan aplikasi 64-bit. Runtime bahasa umum 64-bit harus ada di sistem host.

ASP.NET Core dikirimkan dengan server Kestrel, server HTTP lintas platform default.

Saat menggunakan IIS atau IIS Express, aplikasi berjalan dalam proses yang terpisah dari proses pekerja IIS (di luar proses) dengan server Kestrel.

Karena aplikasi ASP.NET Core berjalan dalam proses yang terpisah dari proses pekerja IIS, modul menangani manajemen proses. Modul memulai proses untuk aplikasi ASP.NET Core ketika permintaan pertama tiba dan memulai ulang aplikasi jika aplikasi dimatikan atau mengalami crash. Ini pada dasarnya merupakan perilaku yang sama seperti yang terlihat pada aplikasi yang berjalan dalam proses yang dikelola oleh Windows Process Activation Service (WAS).

Diagram berikut mengilustrasikan hubungan antara IIS, ASP.NET Core Module, dan aplikasi yang dihosting di luar proses:

ASP.NET Core Module v2 13.1.19331.0

Permintaan datang dari web ke driver HTTP.sys mode kernel. Driver merutekan permintaan ke IIS pada port situs web yang dikonfigurasi, biasanya 80 (HTTP) atau 443 (HTTPS). Modul meneruskan permintaan ke Kestrel pada port acak untuk aplikasi, yang bukan port 80 atau 443.

Modul menentukan port melalui variabel lingkungan saat startup, dan Middleware Integrasi IIS mengonfigurasi server yang akan didengarkan di http://localhost:{port}. Pemeriksaan tambahan dilakukan, dan permintaan yang tidak berasal dari modul ditolak. Modul tidak mendukung penerusan HTTPS, jadi permintaan diteruskan melalui HTTP meskipun diterima oleh IIS melalui HTTPS.

Setelah Kestrel mengambil permintaan dari modul, permintaan didorong ke dalam alur middleware ASP.NET Core. Alur middleware menangani permintaan dan meneruskannya sebagai instans HttpContext ke logika aplikasi. Middleware yang ditambahkan oleh Integrasi IIS memperbarui skema, IP jarak jauh, dan basis jalur ke akun untuk meneruskan permintaan ke Kestrel. Respons aplikasi diteruskan kembali ke IIS, yang mendorongnya kembali ke klien HTTP yang menginisiasi permintaan.

CreateDefaultBuilder mengonfigurasi server Kestrel sebagai server web dan mengaktifkan Integrasi IIS dengan mengonfigurasi jalur dasar dan port untuk ASP.NET Core Module.

ASP.NET Core Module menghasilkan port dinamis untuk ditetapkan ke proses backend. CreateDefaultBuilder memanggil metode UseIISIntegration. UseIISIntegration mengonfigurasi Kestrel untuk mendengarkan pada port dinamis di alamat IP localhost (127.0.0.1). Jika port dinamis adalah 1234, Kestrel mendengarkan di 127.0.0.1:1234. Konfigurasi ini menggantikan konfigurasi URL lain yang disediakan oleh:

Panggilan ke UseUrls atau API Listen Kestrel tidak diperlukan saat menggunakan modul. Jika UseUrls atau Listen dipanggil, Kestrel mendengarkan pada port yang ditentukan hanya saat menjalankan aplikasi tanpa IIS.

Untuk panduan konfigurasi ASP.NET Core Module, lihat ASP.NET Core Module (ANCM) untuk IIS.

Untuk informasi lebih lanjut tentang hosting, lihat Menghosting di ASP.NET Core.

Konfigurasi aplikasi

Mengaktifkan komponen IISintegration

Saat membangun host di CreateWebHostBuilder (Program.cs), panggil CreateDefaultBuilder untuk mengaktifkan integrasi IIS:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Untuk informasi lebih lanjut tentang CreateDefaultBuilder, lihat ASP.NET Core Web Host.

Opsi IIS

Opsi Default Pengaturan
AutomaticAuthentication true Jika true, Server IIS mengatur HttpContext.User yang diautentikasi oleh Autentikasi Windows. Jika false, server hanya menyediakan identity untuk HttpContext.User dan merespons tantangan ketika secara eksplisit diminta oleh AuthenticationScheme. Autentikasi Windows harus diaktifkan di IIS agar AutomaticAuthentication berfungsi. Untuk informasi lebih lanjut, lihat Autentikasi Windows.
AuthenticationDisplayName null Mengatur nama tampilan yang ditampilkan kepada pengguna di halaman masuk.

Untuk mengonfigurasi opsi IIS, sertakan konfigurasi layanan untuk IISOptions di ConfigureServices. Contoh berikut mencegah aplikasi mengisi HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opsi Default Pengaturan
AutomaticAuthentication true Jika true, Middleware Integrasi IIS mengatur HttpContext.User yang diautentikasi oleh Autentikasi Windows. Jika false, middleware hanya menyediakan identity untuk HttpContext.User dan merespons tantangan ketika secara eksplisit diminta oleh AuthenticationScheme. Autentikasi Windows harus diaktifkan di IIS agar AutomaticAuthentication berfungsi. Untuk informasi lebih lanjut, lihat topik Autentikasi Windows.
AuthenticationDisplayName null Mengatur nama tampilan yang ditampilkan kepada pengguna di halaman masuk.
ForwardClientCertificate true Jika true dan header permintaan MS-ASPNETCORE-CLIENTCERT ada, HttpContext.Connection.ClientCertificate akan terisi.

Skenario server proksi dan penyeimbang beban

Middleware Integrasi IIS, yang mengonfigurasi Middleware Header yang Diteruskan, dan ASP.NET Core Module dikonfigurasi untuk meneruskan skema (HTTP/HTTPS) dan alamat IP jarak jauh tempat permintaan berasal. Konfigurasi tambahan mungkin diperlukan untuk aplikasi yang dihosting di belakang server proksi tambahan dan penyeimbang beban. Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proxy dan memuat penyeimbang.

File web.config

File web.config mengonfigurasi ASP.NET Core Module. Membuat, mengubah, dan menerbitkan file web.config ditangani oleh target MSBuild (_TransformWebConfig) saat proyek diterbitkan. Target ini ada di target Web SDK (Microsoft.NET.Sdk.Web). SDK diatur di bagian atas file proyek:

<Project Sdk="Microsoft.NET.Sdk.Web">

Jika file web.config tidak ada dalam proyek, file dibuat dengan processPath dan argumen yang benar untuk mengonfigurasi ASP.NET Core Module dan dipindahkan ke output yang diterbitkan.

Jika file web.config ada dalam proyek, file diubah dengan processPath dan argumen yang benar untuk mengonfigurasi ASP.NET Core Module dan dipindahkan ke output yang diterbitkan. Transformasi tidak mengubah pengaturan konfigurasi IIS dalam file.

File web.config mungkin menyediakan pengaturan konfigurasi IIS tambahan yang mengontrol modul IIS aktif. Untuk informasi tentang modul IIS yang mampu memproses permintaan dengan aplikasi ASP.NET Core, lihat topik modul IIS.

Untuk mencegah agar Web SDK tidak mengubah file web.config, gunakan properti <IsTransformWebConfigDisabled> dalam file proyek:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Saat menonaktifkan Web SDK agar tidak mengubah file, processPath dan argumen harus diatur secara manual oleh pengembang. Untuk informasi lebih lanjut, lihat ASP.NET Core Module (ANCM) untuk IIS.

Lokasi file web.config

Untuk menyiapkan ASP.NET Core Module dengan benar, file web.config harus ada di jalur akar konten (biasanya jalur dasar aplikasi) dari aplikasi yang disebarkan. Ini adalah lokasi yang sama dengan jalur fisik situs web yang disediakan untuk IIS. File web.config diperlukan di akar aplikasi untuk mengaktifkan penerbitan beberapa aplikasi menggunakan Web Deploy.

File sensitif ada di jalur fisik aplikasi, seperti <assembly>.runtimeconfig.json, <assembly>.xml (komentar Dokumentasi XML), dan <assembly>.deps.json. Saat file web.config ada dan situs dimulai secara normal, IIS tidak menyajikan file sensitif ini jika diminta. Jika file web.config tidak ada, salah diberi nama, atau tidak dapat mengonfigurasi situs untuk startup yang normal, IIS mungkin menyajikan file sensitif secara publik.

File web.config harus selalu ada dalam penyebaran, diberi nama dengan benar, dan dapat mengonfigurasi situs untuk startup yang normal. Jangan pernah menghapus file web.config dari penyebaran produksi.

Mengubah web.config

Jika Anda perlu mengubah web.config saat penerbitan (misalnya, mengatur variabel lingkungan berdasarkan konfigurasi, profil, atau lingkungan), lihat Mengubah web.config.

Konfigurasi IIS

Sistem Operasi Windows Server

Aktifkan peran server Server Web (IIS) dan buat layanan peran.

  1. Gunakan wizard Tambahkan Peran dan Fitur dari menu Kelola atau tautan di Pengelola Server. Pada langkah Peran Server, centang kotak untuk Server Web (IIS).

    Peran IIS Server Web dipilih di langkah Pilih peran server.

  2. Setelah langkah Fitur, langkah Layanan peran akan dimuat untuk Server Web (IIS). Pilih layanan peran IIS yang diinginkan atau terima layanan peran default yang disediakan.

    Layanan peran default dipilih di langkah Pilih layanan peran.

    Autentikasi Windows (Opsional)
    Untuk mengaktifkan Autentikasi Windows, luaskan node berikut: Server Web>Keamanan. Pilih fitur Autentikasi Windows. Untuk informasi lebih lanjut, lihat Autentikasi Windows <windowsAuthentication> dan Mengonfigurasi autentikasi Windows.

    WebSocket (Opsional)
    WebSocket didukung dengan ASP.NET Core 1.1 atau yang lebih baru. Untuk mengaktifkan WebSocket, perluas node berikut: Server Web>Pengembangan Aplikasi. Pilih fitur Protokol WebSocket. Untuk informasi lebih lanjut, lihat WebSocket.

  3. Lanjutkan ke langkah Konfirmasi untuk memasang peran dan layanan server web. Tindakan mulai ulang server/IIS tidak diperlukan setelah memasang peran Server Web (IIS).

Sistem operasi desktop Windows

Aktifkan IIS Management Console dan Layanan W3.

  1. Buka Panel Kontrol>Program>Program dan Fitur>Aktifkan atau nonaktifkan fitur Windows (sisi kiri layar).

  2. Buka node Internet Information Services. Buka node Alat Manajemen Web.

  3. Centang kotak untuk IIS Management Console.

  4. Centang kotak untuk Layanan W3.

  5. Terima fitur default untuk Layanan W3 atau kustomisasi fitur IIS.

    Autentikasi Windows (Opsional)
    Untuk mengaktifkan Autentikasi Windows, luaskan node berikut: Layanan W3>Keamanan. Pilih fitur Autentikasi Windows. Untuk informasi lebih lanjut, lihat Autentikasi Windows <windowsAuthentication> dan Mengonfigurasi autentikasi Windows.

    WebSocket (Opsional)
    WebSocket didukung dengan ASP.NET Core 1.1 atau yang lebih baru. Untuk mengaktifkan WebSocket, luaskan node berikut: Layanan W3>Fitur Pengembangan Aplikasi. Pilih fitur Protokol WebSocket. Untuk informasi lebih lanjut, lihat WebSocket.

  6. Jika penginstalan IIS memerlukan tindakan mulai ulang, mulai ulang sistem.

IIS Management Console dan Layanan W3 dipilih di Fitur Windows.

Memasang .NET Core Hosting Bundle

Pasang .NET Core Hosting Bundle pada sistem hosting. Bundel memasang .NET Core Runtime, .NET Core Library, dan ASP.NET Core Module. Modul ini memungkinkan aplikasi ASP.NET Core berjalan di belakang IIS.

Penting

Jika Hosting Bundle dipasang sebelum IIS, penginstalan bundel harus diperbaiki. Jalankan lagi alat penginstal Hosting Bundle setelah memasang IIS.

Jika Hosting Bundle dipasang setelah memasang versi 64-bit (x64) .NET Core, SDK mungkin tampak tidak ada (Tidak ada .NET Core SDK yang terdeteksi). Untuk mengatasi masalah tersebut, lihat Memecahkan masalah dan mendebug proyek ASP.NET Core.

Unduh

  1. Buka halaman Unduh .NET Core.
  2. Pilih versi .NET Core yang diinginkan.
  3. Di kolom Jalankan aplikasi - Runtime bahasa umum, temukan baris versi runtime bahasa umum .NET Core yang diinginkan.
  4. Unduh alat penginstal menggunakan tautan Hosting Bundle.

Peringatan

Beberapa alat penginstal berisi versi rilis yang telah mencapai akhir masa pakainya (EOL) dan tidak lagi didukung oleh Microsoft. Untuk informasi lebih lanjut, lihat kebijakan dukungan.

Memasang Hosting Bundle

  1. Jalankan alat penginstal di server. Parameter berikut tersedia saat menjalankan alat penginstal dari shell perintah administrator:

    • OPT_NO_ANCM=1:Lewati penginstalan ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: Lewati penginstalan runtime bahasa umum .NET Core. Digunakan saat server hanya menghosting penyebaran mandiri (SCD).
    • OPT_NO_SHAREDFX=1: Lewati penginstalan ASP.NET Shared Framework (runtime bahasa umum ASP.NET). Digunakan saat server hanya menghosting penyebaran mandiri (SCD).
    • OPT_NO_X86=1: Lewati penginstalan runtime bahasa umum x86. Gunakan parameter ini ketika Anda tahu bahwa Anda tidak akan menghosting aplikasi 32-bit. Jika ada kemungkinan Anda akan menghosting aplikasi 32-bit dan 64-bit di masa mendatang, jangan gunakan parameter ini dan pasang kedua runtime bahasa umum.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Nonaktifkan pemeriksaan untuk menggunakan Konfigurasi Bersama IIS saat konfigurasi bersama (applicationHost.config) berada di mesin yang sama dengan penginstalan IIS. Hanya tersedia untuk alat penginstal Hosting Bundler ASP.NET Core 2.2 atau yang lebih baru. Untuk informasi lebih lanjut, lihat ASP.NET Core Module (ANCM) untuk IIS.
  2. Mulai ulang sistem atau jalankan perintah berikut di shell perintah:

    net stop was /y
    net start w3svc
    

    Tindakan memulai ulang IIS akan mengambil perubahan pada sistem PATH, yang merupakan variabel lingkungan, yang dibuat oleh alat penginstal.

Tidak perlu secara manual menghentikan masing-masing situs di IIS saat memasang Hosting Bundle. Aplikasi yang dihosting (situs IIS) dimulai ulang saat IIS dimulai ulang. Aplikasi dimulai kembali saat menerima permintaan pertama, termasuk dari Modul Inisialisasi Aplikasi.

ASP.NET Core mengadopsi perilaku roll-forward untuk rilis patch dari paket kerangka kerja bersama. Saat aplikasi yang dihosting oleh IIS dimulai ulang dengan IIS, aplikasi dimuat dengan rilis patch terbaru dari paket yang direferensikan saat mereka menerima permintaan pertama. Jika IIS tidak dimulai ulang, aplikasi memulai ulang dan menunjukkan perilaku roll-forward saat proses pekerja mereka didaur ulang dan mereka menerima permintaan pertama.

Catatan

Untuk informasi tentang Konfigurasi Bersama IIS, lihat ASP.NET Core Module dengan Konfigurasi Bersama IIS.

Memasang Web Deploy saat menerbitkan dengan Visual Studio

Saat menyebarkan aplikasi ke server dengan Web Deploy, pasang versi terbaru Web Deploy di server. Untuk menginstal Web Deploy, gunakan Web Platform Installer (WebPI) atau Unduhan IIS: Web Deploy. Metode pilihannya adalah menggunakan WebPI. WebPI menawarkan penyiapan mandiri dan konfigurasi untuk penyedia hosting.

Membuat situs IIS

  1. Pada sistem hosting, buat folder untuk memuat folder dan file aplikasi yang diterbitkan. Pada langkah berikut, jalur folder disediakan ke IIS sebagai jalur fisik ke aplikasi. Untuk informasi lebih lanjut tentang folder penyebaran dan tata letak file aplikasi, lihat Struktur direktori ASP.NET Core.

  2. Di Manajer IIS, buka node server di panel Koneksi. Klik kanan folder Situs. Pilih Tambahkan Situs Web dari menu kontekstual.

  3. Berikan Nama situs dan atur Jalur fisik ke folder penyebaran aplikasi. Berikan konfigurasi Pengikatan dan buat situs web dengan memilih Oke:

    Berikan Nama situs, jalur fisik, dan Nama host di langkah Tambahkan Situs Web.

    Peringatan

    Pengikatan wildcard tingkat atas (http://*:80/ dan http://+:80) tidak boleh digunakan. Pengikatan wildcard tingkat atas dapat mengekspos aplikasi Anda terhadap kerentanan keamanan. Ini berlaku untuk wildcard kuat dan lemah. Gunakan nama host eksplisit alih-alih wildcard. Pengikatan wildcard subdomain (misalnya, *.mysub.com) tidak memiliki risiko keamanan ini jika Anda mengontrol seluruh domain induk (alih-alih *.com, yang rentan). Lihat RFC 9110: Semantik HTTP (Bagian 7.2: Host dan :otoritas) untuk informasi selengkapnya.

  4. Di bawah node server, pilih Kelompok Aplikasi.

  5. Klik kanan kelompok aplikasi situs dan pilih Pengaturan Dasar dari menu kontekstual.

  6. Di jendela Edit Kelompok Aplikasi, atur Versi .NET CLR ke Tanpa Kode Aman:

    Atur Tanpa Kode Aman untuk versi .NET CLR.

    ASP.NET Core berjalan dalam proses terpisah dan mengelola runtime bahasa umum. ASP.NET Core tidak bergantung pada pemuatan CLR desktop (.NET CLR)—Core Common Language Runtime (CoreCLR) untuk .NET Core di-boot untuk menghosting aplikasi dalam proses pekerja. Mengatur Versi .NET CLR ke Tanpa Kode Aman sifatnya opsional tetapi disarankan.

  7. ASP.NET Core 2.2 atau yang lebih baru: Untuk penyebaran mandiri 64-bit (x64) yang menggunakan model hosting dalam proses, nonaktifkan kelompok aplikasi untuk proses 32-bit (x86).

    Di bilah sisi Tindakan Manajer IIS >Kelompok Aplikasi, pilih Atur Default Kelompok Aplikasi atau Pengaturan Tingkat Lanjut. Cari Aktifkan Aplikasi 32-Bit dan atur nilainya ke False. Pengaturan ini tidak memengaruhi aplikasi yang disebarkan untuk hosting di luar proses.

  8. Konfirmasikan model identity proses memiliki izin yang tepat.

    Jika default identity kumpulan aplikasi (ModelIdentity> Proses) diubah dari ApplicationPoolIdentity ke yang lainidentity, verifikasi bahwa yang baru identity memiliki izin yang diperlukan untuk mengakses folder aplikasi, database, dan sumber daya lain yang diperlukan. Misalnya, kelompok aplikasi memerlukan akses baca dan tulis ke folder tempat aplikasi membaca dan menulis file.

Konfigurasi Autentikasi Windows (Opsional)
Untuk informasi lebih lanjut, lihat Mengonfigurasi autentikasi Windows.

Menyebarkan aplikasi

Sebarkan aplikasi ke folder Jalur fisik IIS yang dibuat di bagian Membuat situs IIS. Web Deploy adalah mekanisme yang disarankan untuk penyebaran, tetapi ada beberapa opsi untuk memindahkan aplikasi dari folder publish proyek ke folder penyebaran sistem hosting.

Web Deploy dengan Visual Studio

Lihat topik Profil penerbitan Visual Studio untuk penyebaran aplikasi ASP.NET Core guna mempelajari cara membuat profil penerbitan untuk digunakan dengan Web Deploy. Jika penyedia hosting menyediakan Profil Penerbitan atau dukungan untuk membuatnya, unduh profil mereka dan impor menggunakan dialog Terbitkan Visual Studio:

Halaman dialog terbitkan

Web Deploy di luar Visual Studio

Web Deploy juga dapat digunakan di luar Visual Studio dari baris perintah. Untuk informasi lebih lanjut, lihat Alat Web Deployment.

Alternatif untuk Web Deploy

Gunakan salah satu dari beberapa metode untuk memindahkan aplikasi ke sistem hosting, seperti salinan manual, Xcopy, Robocopy, atau PowerShell.

Untuk informasi lebih lanjut tentang penyebaran ASP.NET Core ke IIS, lihat bagian Sumber daya penyebaran untuk administrator IIS.

Telusuri situs web

Setelah aplikasi disebarkan ke sistem hosting, buat permintaan ke salah satu titik akhir publik aplikasi.

Dalam contoh berikut, situs terikat ke nama Host IIS di Port 80.www.mysite.com Permintaan dibuat untuk http://www.mysite.com:

Browser Microsoft Edge telah memuat halaman startup IIS.

File penyebaran yang dikunci

File dalam folder penyebaran dikunci saat aplikasi sedang berjalan. File yang dikunci tidak dapat ditimpa selama penyebaran. Untuk merilis file yang dikunci dalam penyebaran, hentikan kelompok aplikasi menggunakan salah satu pendekatan berikut:

  • Gunakan Web Deploy dan referensikan ke Microsoft.NET.Sdk.Web dalam file proyek. File app_offline.htm ditempatkan di akar direktori aplikasi web. Jika file ada, ASP.NET Core Module akan dengan lancar mematikan aplikasi dan menyajikan file app_offline.htm selama penyebaran. Untuk informasi lebih lanjut, lihat Referensi konfigurasi ASP.NET Core Module.

  • Hentikan kelompok aplikasi secara manual di Manajer IIS di server.

  • Gunakan PowerShell untuk menghilangkan app_offline.htm (memerlukan PowerShell 5 atau yang lebih baru):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Perlindungan data

Tumpukan ASP.NET Core Data Protection digunakan oleh beberapa middleware ASP.NET Core, termasuk middleware yang digunakan dalam autentikasi. Meskipun API Perlindungan Data tidak dipanggil oleh kode pengguna, perlindungan data harus dikonfigurasi dengan skrip penyebaran atau dalam kode pengguna untuk membuat penyimpanan kunci kriptografik yang persisten. Jika perlindungan data tidak dikonfigurasi, kunci disimpan di memori dan dibuang saat aplikasi dimulai ulang.

Jika ring kunci disimpan dalam memori saat aplikasi dimulai ulang:

  • Semua token autentikasi berbasis cookie menjadi tidak valid.
  • Pengguna diminta untuk masuk lagi pada permintaan berikutnya.
  • Data apa pun yang dilindungi dengan ring kunci tidak dapat lagi didekripsi. Ini mungkin termasuk token CSRF dan cookie ASP.NET Core MVC TempData.

Untuk mengonfigurasi perlindungan data di bawah IIS guna mempertahankan ring kunci, gunakan salah satu pendekatan berikut:

  • Membuat Kunci Registri Perlindungan Data

    Kunci perlindungan data yang digunakan oleh aplikasi ASP.NET Core disimpan di registri di luar aplikasi. Untuk mempertahankan kunci untuk aplikasi tertentu, buat kunci registri untuk kelompok aplikasi.

    Untuk penginstalan IIS non-webfarm mandiri, skrip PowerShell Perlindungan Data Provision-AutoGenKeys.ps1 dapat digunakan untuk setiap kelompok aplikasi yang digunakan dengan aplikasi ASP.NET Core. Skrip ini membuat kunci registri di registri HKLM yang hanya dapat diakses oleh akun proses pekerja dari kelompok aplikasi dari aplikasi. Kunci dienkripsi saat rest menggunakan DPAPI dengan kunci di seluruh komputer.

    Dalam skenario farm web, aplikasi dapat dikonfigurasi untuk menggunakan jalur UNC untuk menyimpan ring kunci perlindungan datanya. Secara default, kunci perlindungan data tidak dienkripsi. Pastikan bahwa izin file untuk berbagi jaringan terbatas pada akun Windows tempat aplikasi berjalan. Sertifikat X509 dapat digunakan untuk melindungi kunci di rest. Pertimbangkan mekanisme untuk mengizinkan pengguna mengunggah sertifikat: Tempatkan sertifikat ke dalam penyimpanan sertifikat tepercaya pengguna dan pastikan sertifikat tersebut tersedia di semua mesin tempat aplikasi pengguna berjalan. Lihat Mengonfigurasi Perlindungan Data ASP.NET Core untuk detailnya.

  • Mengonfigurasikan Kelompok Aplikasi IIS untuk memuat profil pengguna

    Pengaturan ini ada di bagian Model Proses di bawah Pengaturan Tingkat Lanjut untuk kelompok aplikasi. Atur Muat Profil Pengguna ke True. Jika diatur ke True, kunci disimpan di direktori profil pengguna dan dilindungi menggunakan DPAPI dengan kunci khusus untuk akun pengguna. Kunci disimpan ke folder %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.

    Atribut setProfileEnvironment kelompok aplikasi juga harus diaktifkan. Nilai default setProfileEnvironment adalah true. Dalam beberapa skenario (misalnya, OS Windows), setProfileEnvironment diatur ke false. Jika kunci tidak disimpan di direktori profil pengguna seperti yang diharapkan:

    1. Buka folder %windir%/system32/inetsrv/config.
    2. Buka file applicationHost.config.
    3. Temukan <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> elemennya.
    4. Konfirmasikan bahwa atribut setProfileEnvironment tidak ada, yang membuat nilai diatur ke default true, atau secara eksplisit mengatur nilai atribut ke true.
  • Menggunakan sistem file sebagai penyimpanan ring kunci

    Sesuaikan kode aplikasi untuk menggunakan sistem file sebagai penyimpanan ring kunci. Gunakan sertifikat X509 untuk melindungi ring kunci dan pastikan sertifikat tersebut adalah sertifikat tepercaya. Jika sertifikat ditandatangani sendiri, letakkan sertifikat di penyimpanan Akar Tepercaya.

    Saat menggunakan IIS di farm web:

  • Mengatur kebijakan di seluruh mesin untuk perlindungan data

    Sistem perlindungan data memiliki dukungan terbatas guna mengatur kebijakan seluruh mesin default untuk semua aplikasi yang menggunakan API Perlindungan Data. Untuk informasi lebih lanjut, lihat Gambaran umum Perlindungan Data ASP.NET Core.

Direktori Virtual

Direktori Virtual IIS tidak didukung dengan aplikasi ASP.NET Core. Aplikasi dapat dihosting sebagai sub-aplikasi.

Sub-aplikasi

Aplikasi ASP.NET Core dapat dihosting sebagai sub-aplikasi (sub-apk) IIS. Jalur sub-aplikasi menjadi bagian dari URL aplikasi akar.

Sub-aplikasi tidak boleh menyertakan ASP.NET Core Module sebagai penanganan. Jika modul ditambahkan sebagai penanganan dalam file web.config sub-aplikasi, Kesalahan Server Internal 500.19 yang mereferensikan ke file konfigurasi yang salah akan diterima saat mencoba menelusuri sub-aplikasi .

Contoh berikut menunjukkan file web.config yang diterbitkan untuk sub-aplikasi ASP.NET Core:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Saat menghosting sub-aplikasi non-ASP.NET Core di bawah aplikasi ASP.NET Core, hapus secara eksplisit penanganan yang diwarisi di file web.config sub-aplikasi:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Tautan aset statis dalam sub-aplikasi harus menggunakan notasi tilde-slash (~/). Notasi tilde-slash memicu Pembantu Tag untuk menambahkan basis jalur sub-aplikasi ke tautan relatif yang dirender. Untuk sub-aplikasi di /subapp_path, gambar yang ditautkan dengan src="~/image.png" akan dirender sebagai src="/subapp_path/image.png". Middleware File Statis dari aplikasi akar tidak memproses permintaan file statis. Permintaan diproses oleh Middleware File Statis sub-aplikasi.

Jika atribut src aset statis diatur ke jalur absolut (misalnya, src="/image.png"), tautan akan dirender tanpa basis jalur sub-aplikasi. Middleware File Statis aplikasi akar mencoba menyajikan aset dari akar web aplikasi akar, yang menghasilkan respons 404 - Tidak Ditemukan, kecuali jika aset statis tersedia dari aplikasi akar.

Untuk menghosting aplikasi ASP.NET Core sebagai sub-aplikasi di bawah aplikasi ASP.NET Core lain:

  1. Buat kelompok aplikasi untuk sub-aplikasi. Atur Versi .NET CLR ke Tanpa Kode Aman karena Core Common Language Runtime (CoreCLR) untuk .NET Core di-boot untuk menghosting aplikasi dalam proses pekerja, bukan CLR desktop (.NET CLR).

  2. Tambahkan situs akar di Manajer IIS dengan sub-aplikasi di folder di bawah situs akar.

  3. Klik kanan folder sub-aplikasi di Manajer IIS dan pilih Konversikan ke Aplikasi.

  4. Dalam dialog Tambahkan Aplikasi, gunakan tombol Pilih untuk Kelompok Aplikasi guna menetapkan kelompok aplikasi yang Anda buat untuk sub-aplikasi. Pilih OK.

Penetapan kelompok aplikasi terpisah untuk sub-aplikasi adalah persyaratan saat menggunakan model hosting dalam proses.

Untuk informasi lebih lanjut tentang model hosting dalam proses dan mengonfigurasi ASP.NET Core Module, lihat ASP.NET Core Module (ANCM) untuk IIS.

Konfigurasi IIS dengan web.config

Konfigurasi IIS dipengaruhi oleh bagian <system.webServer> dari web.config untuk skenario IIS yang berfungsi untuk aplikasi ASP.NET Core dengan ASP.NET Core Module. Misalnya, konfigurasi IIS berfungsi untuk pemadatan dinamis. Jika IIS dikonfigurasi pada tingkat server untuk menggunakan pemadatan dinamis, elemen <urlCompression> dalam file web.config aplikasi dapat menonaktifkannya untuk aplikasi ASP.NET Core.

Untuk mengetahui informasi selengkapnya, lihat topik berikut:

Untuk mengatur variabel lingkungan untuk masing-masing aplikasi yang berjalan di kelompok aplikasi yang terisolasi (didukung untuk IIS 10.0 atau yang lebih baru), lihat bagian perintah AppCmd.exe dari topik Variabel Lingkungan <environmentVariables> dalam dokumentasi referensi IIS.

Bagian yang tidak digunakan oleh ASP.NET Core

Bagian konfigurasi aplikasi ASP.NET 4.x di web.config tidak digunakan oleh aplikasi ASP.NET Core untuk konfigurasi:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Aplikasi ASP.NET Core dikonfigurasi menggunakan penyedia konfigurasi lain. Untuk informasi lebih lanjut, lihat Konfigurasi.

Kelompok Aplikasi

Saat menghosting beberapa situs web di server, sebaiknya isolasi aplikasi satu sama lain dengan menjalankan setiap aplikasi di kelompok aplikasinya masing-masing. Dialog Tambahkan Situs Web IIS default ke konfigurasi ini. Saat Nama situs diberikan, teks secara otomatis ditransfer ke kotak teks Kelompok aplikasi. Kelompok aplikasi baru dibuat menggunakan nama situs saat situs ditambahkan.

Identity Kelompok Aplikasi

Akun kumpulan identity aplikasi memungkinkan aplikasi berjalan di bawah akun unik tanpa harus membuat dan mengelola domain atau akun lokal. Pada IIS 8.0 atau yang lebih baru, Proses Pekerja Admin IIS (WAS) membuat akun virtual dengan nama kelompok aplikasi baru dan menjalankan proses pekerja kelompok aplikasi di bawah akun ini secara default. Di Konsol Manajemen IIS di bawah Pengaturan Tingkat Lanjut untuk kumpulan aplikasi, pastikan bahwa Identity diatur untuk menggunakan ApplicationPoolIdentity:

Dialog pengaturan tingkat lanjut kelompok aplikasi

Proses manajemen IIS membuat pengidentifikasi aman dengan nama kelompok aplikasi di Sistem Keamanan Windows. Sumber daya dapat diamankan menggunakan ini identity. Namun, ini identity bukan akun pengguna nyata dan tidak muncul di Konsol Manajemen Pengguna Windows.

Jika proses pekerja IIS memerlukan akses yang ditingkatkan ke aplikasi, ubah Daftar Kontrol Akses (ACL) untuk direktori yang berisi aplikasi:

  1. Buka Windows Explorer dan buka direktori.

  2. Klik kanan pada direktori dan pilih Properti.

  3. Di bawah tab Keamanan, pilih tombol Edit lalu tombol Tambahkan.

  4. Pilih tombol Lokasi dan pastikan sistem dipilih.

  5. Masukkan IIS AppPool\<app_pool_name> di area Masukkan nama objek yang akan dipilih. Pilih tombol Periksa Nama. Untuk DefaultAppPool periksa nama menggunakan IIS AppPool\DefaultAppPool. Saat tombol Periksa Nama dipilih, nilai DefaultAppPool ditunjukkan di area nama objek. Tidak mungkin memasukkan nama kelompok aplikasi langsung ke area nama objek. Gunakan format IIS AppPool\<app_pool_name> saat memeriksa nama objek.

    Dialog pilih pengguna atau grup untuk folder aplikasi: Nama kelompok aplikasi

  6. Pilih OK.

    Dialog pilih pengguna atau grup untuk folder aplikasi: Setelah memilih

  7. Izin baca & jalankan harus diberikan secara default. Berikan izin tambahan sesuai kebutuhan.

Akses juga dapat diberikan pada perintah menggunakan alat ICACLS. Menggunakan DefaultAppPool sebagai contoh, perintah berikut digunakan:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Untuk informasi lebih lanjut, lihat topik icacls.

Dukungan HTTP/2

HTTP/2 didukung untuk penyebaran di luar proses yang memenuhi persyaratan dasar berikut:

  • Windows Server 2016/Windows 10 atau yang lebih baru; IIS 10 atau yang lebih baru
  • Koneksi server tepi yang menghadap publik menggunakan HTTP/2, tetapi koneksi proksi terbalik ke server Kestrel menggunakan HTTP/1.1.
  • Kerangka kerja target: Tidak berlaku untuk penyebaran di luar proses, karena koneksi HTTP/2 ditangani sepenuhnya oleh IIS.
  • TLS 1.2 atau koneksi yang lebih baru

Jika koneksi HTTP/2 dibuat, HttpRequest.Protocol melaporkan HTTP/1.1.

HTTP/2 diaktifkan secara default. Koneksi kembali ke HTTP/1.1 jika koneksi HTTP/2 tidak dibuat. Untuk informasi lebih lanjut tentang konfigurasi HTTP/2 dengan penyebaran IIS, lihat HTTP/2 di IIS.

Permintaan Preflight CORS

Bagian ini hanya berlaku untuk aplikasi ASP.NET Core yang menargetkan .NET Framework.

Untuk aplikasi ASP.NET Core yang menargetkan .NET Framework, permintaan OPTIONS tidak diteruskan ke aplikasi secara default di IIS. Guna mempelajari cara mengonfigurasi penanganan IIS aplikasi di web.config untuk meneruskan permintaan OPTIONS, lihat Mengaktifkan permintaan lintas-asal di ASP.NET Web API 2: Cara Kerja CORS.

Sumber daya penyebaran untuk administrator IIS

Sumber Daya Tambahan: