IIS 500.19 di nebularadius.com: Satu Modul yang Tidak Terpasang
Pada 30 September 2026, nebularadius.com menampilkan halaman *500 - Internal server error* untuk setiap permintaan. Halaman utama gagal, favicon gagal, berkas statis juga gagal. Catatan ini merekam cara menemukan penyebabnya dan apa yang dikerjakan.
Gejala awal
Halaman yang muncul adalah gaya bawaan IIS, bukan halaman galat aplikasi. Dari situ saja sudah terlihat bahwa letak masalahnya di lapisan web server, bukan di kode aplikasi. Pemeriksaan dari luar memberi tiga keterangan:
nebularadius.com -> HTTP 500
server -> Microsoft-IIS/10.0
title -> 500 - Internal server error.
Membaca dua kolom yang menentukan
Log IIS menyimpan keterangan yang cukup untuk menuntaskan dugaan. Setelah kolom sc-status ada dua kolom yang menjadi kunci:
GET / 500 19 13
GET /favicon.ico 500 19 13
500 = kesalahan server
19 = sub-status 19, yaitu HTTP 500.19
13 = win32 status 13, ERROR_INVALID_DATA
Sub-status 19: IIS tidak berhasil memuat konfigurasi situs. Win32 13: data yang dibacanya tidak sah. Keduanya menunjuk ke web.config, atau ke sesuatu yang dirujuk berkas itu.
Uji yang memisahkan dua kemungkinan
Cara tercepat membedakan kerusakan konfigurasi dari kerusakan aplikasi: minta satu berkas statis. Bila favicon.ico juga gagal, seluruh situs mati di lapisan konfigurasi dan aplikasi tidak relevan. Bila hanya rute dinamis yang gagal sementara berkas statis terlayani, letak kesalahannya ada di dalam aplikasi.
Pada kasus ini favicon juga gagal, jadi arah pemeriksaan berpindah ke konfigurasi.
Pemeriksaan di server
Tiga perintah sudah cukup untuk memastikan keadaan sebenarnya:
[xml]$x = Get-Content C:\inetpub\wwwroot\web.config -Raw
Test-Path 'C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll'
Get-WebGlobalModule | Where-Object { $_.Name -like '*AspNet*' }
Hasilnya:
web.config -> XML VALID
aspnetcorev2.dll -> TIDAK ADA
modul global IIS -> KOSONG
C:\Program Files\dotnet -> tidak ada
Sampai di sini penyebabnya sudah terbaca. Berkas web.config utuh dan bentuknya benar, tetapi ia mendeklarasikan modul yang tidak ada di server. Karena modulnya tidak ada, IIS gagal membaca konfigurasi sebelum sempat melayani permintaan apa pun. Itulah sebabnya favicon pun ikut gagal.
XML yang valid belum tentu dapat dimuat. Berkas konfigurasi baru bisa disebut sehat setelah modul yang dirujuknya terbukti terpasang.
Versi runtime diambil dari aplikasi
Versi yang dibutuhkan tidak ditebak dari nama situs, melainkan dibaca dari berkas yang disertakan aplikasi:
Get-Content C:\inetpub\wwwroot\Nebula.runtimeconfig.json -Raw
"tfm": "net10.0"
"Microsoft.NETCore.App" versi 10.0.0
"Microsoft.AspNetCore.App" versi 10.0.0
Aplikasi ini memerlukan .NET 10, sedangkan yang tersedia hanya .NET Framework 4.8. Keduanya produk berbeda dan berdampingan, sehingga angka versi 4.8 tidak boleh dibaca sebagai tanda bahwa runtime sudah ada.
Kapan masalahnya mulai
Pemeriksaan silang dengan waktu ubah berkas menunjukkan urutan berikut:
01/10/2026 02:00:53 seluruh DLL dan web.config ditulis
01/10/2026 02:01:29 web.config dan index.html ditulis
30/09/2026 18:51:37 galat 500.19 mulai muncul
Waktu itu sejalan dengan deploy yang baru, bukan kerusakan yang tumbuh perlahan. Berkas index.html bahkan berisi keterangan pemeliharaan sementara. Jadi yang terjadi adalah penerapan aplikasi baru ke runtime yang belum disiapkan.
Menyingkirkan dugaan yang keliru
Log yang sama juga memuat banyak permintaan mencurigakan:
/wp-admin/install.php 404
/.env 404
/.git/config 404
/xmlrpc.php 404
Semua itu pemindai otomatis dari internet yang datang ratusan kali sehari ke setiap situs publik. Seluruhnya dijawab 404, artinya ditolak dengan benar. Tidak satu pun berkaitan dengan galat 500, dan tidak ada yang perlu ditangani.
Perbaikan
Yang dipasang harus Hosting Bundle, bukan paket runtime saja. Hosting Bundle memuat runtime ASP.NET Core sekaligus modul AspNetCoreModuleV2. Memasang paket runtime tanpa hosting bundle akan meninggalkan modulnya tetap tidak ada, dan galat 500.19 tidak berubah.
$url = 'https://aka.ms/dotnet/10.0/dotnet-hosting-win.exe'
$out = 'C:\Windows\Temp\dotnet-hosting-10.exe'
Invoke-WebRequest -Uri $url -OutFile $out -UseBasicParsing
$sig = Get-AuthenticodeSignature $out
$sig.Status # Valid
$sig.SignerCertificate.Subject
# CN=.NET, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Start-Process $out -ArgumentList '/install','/quiet','/norestart' -Wait -PassThru
# exit code 0 = berhasil
Tanda tangan berkas diperiksa sebelum pemasangan, karena berkas ini diunduh dari internet dan akan dijalankan dengan hak administrator.
Hasil
Microsoft.AspNetCore.App 10.0.12 terpasang
Microsoft.NETCore.App 10.0.12 terpasang
AspNetCoreModuleV2 terdaftar di IIS
nebularadius.com 200
www.nebularadius.com 200
nebularadius.com/favicon.ico 200
Setelah pemasangan, app pool di-recycle lalu situs diuji dari luar server. Halaman yang tersaji kembali adalah aplikasi sebenarnya, bukan halaman pemeliharaan.
Catatan untuk deploy berikutnya
- Hosting Bundle harus dipasang sebelum aplikasi dipindahkan, bukan sesudahnya. Bila tidak, seluruh situs menampilkan 500.19 termasuk berkas statis.
- Versi runtime dibaca dari
<App>.runtimeconfig.json, bukan ditebak dari nama atau versi .NET Framework yang sudah terpasang. - Untuk memastikan tahap mana yang gagal, minta satu berkas statis. Berkas statis ikut gagal berarti masalah konfigurasi, bukan aplikasi.
- Periksa tanda tangan berkas pemasang dari internet sebelum menjalankannya sebagai administrator.
Temuan terpisah yang belum dikerjakan
Di log yang sama ditemukan kegagalan perpanjangan sertifikat pada 26 September 2026. Penyebabnya nama domain yang saat itu tidak dapat diselesaikan, sehingga penerbitan ulang gagal. Sertifikat yang sedang berlaku masih sah sampai 20 Desember 2026, jadi hal ini belum mendesak. Namun bila pembaruan otomatis gagal lagi saat jatuh tempo, HTTPS akan ikut mati. Perlu dipantau.