Start typing to search across invoices, services, domains, tickets, and more...
Si prefiere Windows o necesita ejecutar aplicaciones ASP.NET, alojar un sitio web con IIS en Windows Server es la opción natural. Con Windows Server 2016/2019/2022, esta guía muestra cómo instalar IIS con PowerShell, vincular un sitio a una IP y un encabezado de host concretos (muy útil en servidores multi-IP para hosting SEO con múltiples IP), obtener un certificado SSL gratuito con renovación automática mediante win-acme y ejecutar PHP a través de IIS FastCGI.
Ejecute los comandos siguientes en PowerShell con privilegios de administrador. IIS y su consola de administración se instalan en pocos minutos. Si va a ejecutar PHP, añada al mismo tiempo la característica CGI (incluye FastCGI). Después, abra la IP del servidor en el navegador: si aparece la página de bienvenida de IIS, todo ha funcionado.
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# Opcional: compatibilidad con CGI/FastCGI (necesaria para PHP)
Install-WindowsFeature -Name Web-CGI
Get-WindowsFeature Web-Server, Web-CGIUn enlace (binding) de IIS se compone de dirección IP + puerto + encabezado de host. El ejemplo siguiente crea site1, que responde a www.example.com solo en 203.0.113.11, y añade el dominio sin www como segundo encabezado de host. Sustituya la IP y el dominio por los suyos y apunte antes el registro A del dominio a esa IP.
Import-Module WebAdministration
New-Item -ItemType Directory -Path C:\inetpub\site1 -Force
Set-Content -Path C:\inetpub\site1\index.html -Value "site1 OK"
New-Website -Name "site1" -PhysicalPath "C:\inetpub\site1" -IPAddress "203.0.113.11" -Port 80 -HostHeader "www.example.com"
New-WebBinding -Name "site1" -IPAddress "203.0.113.11" -Port 80 -HostHeader "example.com"
Get-WebBinding -Name "site1"En los servidores multi-IP y de hosting SEO con múltiples IP de IMIDC, un requisito habitual es una IP dedicada por sitio web. Primero añada todas las IPs al adaptador de red (consulte nuestra guía "añadir direcciones IP en Windows") y luego vincule cada sitio a su propia IP. Sin encabezado de host, ese sitio responde a cualquier dominio que apunte a la IP. Detenga el Default Web Site para que su enlace "All Unassigned:80" no capture las solicitudes.
# Un sitio por IP, sin encabezado de host (responde a cualquier dominio que apunte a esa IP)
New-Website -Name "site2" -PhysicalPath "C:\inetpub\site2" -IPAddress "203.0.113.12" -Port 80
New-Website -Name "site3" -PhysicalPath "C:\inetpub\site3" -IPAddress "203.0.113.13" -Port 80
# Detener el Default Web Site para que no capture *:80
Stop-Website -Name "Default Web Site"
Set-ItemProperty "IIS:\Sites\Default Web Site" -Name serverAutoStart -Value $falsewin-acme (wacs.exe) es un cliente de Let's Encrypt para Windows muy utilizado. Detecta los sitios de IIS, completa la validación, instala el certificado, añade el enlace 443 y crea una tarea de renovación. Descargue el zip x64 desde el sitio web oficial de win-acme o desde su página de versiones en GitHub, descomprímalo en C:\tools\win-acme y ejecútelo. Elija crear un certificado con la configuración predeterminada y, a continuación, seleccione su sitio de IIS y sus dominios.
cd C:\tools\win-acme
.\wacs.exe
# Comprobar la tarea de renovación creada por win-acme
Get-ScheduledTask | Where-Object TaskName -like "win-acme*"Antes de solicitar un certificado, asegúrese de que el dominio resuelve a la IP vinculada al sitio, de que el puerto 80 es accesible desde internet (la validación HTTP lo necesita) y de que los enlaces del sitio contienen todos los nombres de host que desea incluir en el certificado.
Descargue el zip NTS (Non Thread Safe) x64 de su versión de PHP desde el sitio oficial de PHP para Windows, descomprímalo en C:\PHP, instale el Visual C++ Redistributable correspondiente y copie php.ini-production como php.ini. Después registre la aplicación FastCGI, asígnele *.php y añada index.php como documento predeterminado con appcmd:
$appcmd = "$env:windir\System32\inetsrv\appcmd.exe"
& $appcmd set config /section:system.webServer/fastCgi /+"[fullPath='C:\PHP\php-cgi.exe']"
& $appcmd set config /section:system.webServer/handlers /+"[name='PHP_via_FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='C:\PHP\php-cgi.exe',resourceType='Either']"
& $appcmd set config /section:defaultDocument /+"files.[value='index.php']"
Set-Content -Path C:\inetpub\site1\info.php -Value "<?php phpinfo();"
iisresetAbra http://su-dominio/info.php; si aparece una página de información de PHP, PHP funciona. Elimine info.php después de la prueba para no exponer detalles del servidor.
Otro sitio ya usa la misma combinación de IP + puerto + encabezado de host, casi siempre el Default Web Site. Deténgalo o cambie su enlace y vuelva a iniciar su sitio.
Compruebe que el registro A apunta a la IP correcta, que el puerto 80 es accesible desde fuera y que ninguna CDN ni regla de redirección bloquea la ruta /.well-known/acme-challenge/.
Elija Windows + IIS para ASP.NET y MSSQL. Para sitios PHP/MySQL, Linux con aaPanel (BaoTa) suele ser más ligero; consulte nuestra guía de instalación de BaoTa.
¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya la IP del servidor, la versión del sistema operativo, los comandos que ejecutó y una captura de pantalla del error para que podamos localizar el problema más rápido.