ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Windows Server

Cómo alojar un sitio web con IIS en Windows Server: IPs, SSL gratis y PHP

5 pasos 14 min de lectura 6 vistas 0
Contenido

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.

Paso 1: Instalar IIS con Install-WindowsFeature

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-CGI
Al instalar IIS se habilita automáticamente la regla de firewall "World Wide Web Services (HTTP Traffic-In)" ("Servicios World Wide Web (tráfico entrante HTTP)"). Si el puerto 443 no está permitido, consulte nuestra guía para abrir puertos en el Firewall de Windows.

Paso 2: Crear un sitio web en IIS y vincular una IP y un encabezado de host

Un 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"

Paso 3: Enlaces de IIS en servidores multi-IP para hosting SEO

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 $false
Cada combinación de IP + puerto + encabezado de host solo puede pertenecer a un sitio; los duplicados impiden que el sitio se inicie. Revise los enlaces existentes con Get-WebBinding antes de añadir muchos sitios.

Paso 4: Certificado SSL gratuito para IIS con win-acme

win-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.

Paso 5: Ejecutar PHP en IIS mediante FastCGI

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();"
iisreset

Abra 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.

Preguntas frecuentes

El sitio no se inicia: "the port may be in use by another website".

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.

La validación de win-acme falla.

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/.

¿Debo usar IIS o aaPanel (BaoTa)?

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.

¿Fue útil la respuesta?

Tutoriales relacionados