System Administration

IIS 500.19 di nebularadius.com: Satu Modul yang Tidak Terpasang

Sampul artikel: 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.

Tim Netvora

Menulis di Netvora Blog. Punya pertanyaan teknis soal artikel ini? Kirim ke info@netvora.co.id.