¿Qué es IIS?
En este post, vamos a echar un vistazo a IIS (Internet Information Services). Veremos qué hace y cómo funciona. Aprenderás a activarlo en Windows. Y después de haber establecido una línea de base con la gestión de IIS utilizando la GUI, verá cómo trabajar con él utilizando la CLI. Empecemos!
¿Qué es un servidor web IIS?
Un servidor web IIS se ejecuta en la plataforma Microsoft .NET en el sistema operativo Windows. Aunque es posible ejecutar IIS en Linux y Mac usando Mono, no se recomienda y probablemente será inestable. (Hay otras opciones, que presentaré más adelante). Es versátil y estable, y ha sido ampliamente utilizado en producción durante muchos años. La versión 10 es la más actual. Una vez instalado, verás esta página de bienvenida en tu navegador. «¡Tervetuloa!»
Pero antes de adentrarnos en los entresijos de IIS, empecemos por definir un servidor web en sentido general.
¿Qué es un servidor web?
Internet es bueno. Y la Internet no puede existir sin servidores web. Pero, ¿qué es exactamente un servidor web? Vamos a definirlo en abstracto para que podamos tener algo de contexto sobre cómo IIS cumple este papel.
Un servidor web es un proceso para alojar aplicaciones web. El servidor web permite que una aplicación procese mensajes que llegan a través de puertos TCP específicos (por defecto). Por ejemplo, el puerto por defecto para el tráfico HTTP es el 80, y el de HTTPS es el 443.
Cuando se visita un sitio web en el navegador, normalmente no se especifica el número de puerto a menos que el servidor web esté configurado para recibir tráfico en puertos distintos al predeterminado. Visitar http://www.example.com enviará su solicitud al puerto 80 implícitamente. Podría especificar el número de puerto si quisiera http://www.example.com:80, y https://www.example.com:443 para TLS (Transport Layer Security).
Asumiendo la configuración por defecto y que TLS está configurado para su aplicación web, el servidor web recibirá todo el tráfico entrante a los puertos 80 y 443. Lo que el servidor web haga con el tráfico a partir de ahí depende. Hay innumerables opciones para que el servidor web pueda procesar esas solicitudes.
¿Cómo maneja IIS las solicitudes web?
Los dos modelos principales de proceso para los servidores web son manejar todas las solicitudes en un solo hilo, o generar un nuevo hilo para cada solicitud. Aunque el modelo de un solo hilo (Node.js, por ejemplo) tiene algunos hilos de trabajo disponibles, normalmente sólo los utiliza para ciertos tipos de trabajo, como el acceso al sistema de archivos. El modelo de hilo por solicitud que utiliza IIS (y su primo ligero IIS Express) tomará un hilo de un grupo de hilos para cada solicitud.
Los servidores web suelen manejar las solicitudes utilizando un patrón de solicitud-respuesta. El cliente envía una solicitud y recibe una respuesta si todo va bien. El protocolo HTTP es la elección omnipresente cuando se comunica entre un cliente y un servidor web a través de Internet.
Características
IIS es rico en características. Lo más habitual es que IIS se utilice para alojar aplicaciones web ASP.NET y sitios web estáticos. También puede utilizarse como servidor FTP, alojar servicios WCF y ampliarse para alojar aplicaciones web creadas en otras plataformas, como PHP.
Hay opciones de autenticación incorporadas, como Basic, ASP.NET y Windows auth. Esta última es útil si tiene un entorno de Directorio Activo de Windows: los usuarios pueden firmar automáticamente en las aplicaciones web utilizando su cuenta de dominio. Otras características de seguridad incorporadas incluyen la gestión de certificados TLS y la vinculación para habilitar HTTPS y SFTP en sus sitios, el filtrado de solicitudes para la lista blanca o la lista negra del tráfico, las reglas de autorización, el registro de solicitudes y un amplio conjunto de opciones de seguridad específicas de FTP.
Una característica clave de IIS es el grupo de aplicaciones. Tendremos que echar un vistazo más de cerca al pool de aplicaciones, ya que es un componente crítico del modelo de procesos de IIS.
Una característica inestimable es la gestión remota. IIS también se puede gestionar a través de la CLI o utilizando PowerShell. Se puede hacer un script de todo, lo cual es genial si le gusta el poder que conlleva poder hacerlo.
A estas alturas, debería tener una buena impresión sobre la configurabilidad y versatilidad de IIS. También debe saber que puede ser extendido para servir (juego de palabras) muchos propósitos además de alojar aplicaciones ASP.NET. A través de la extensión, IIS se convierte en un servidor web altamente versátil y estable para la plataforma Windows. Veamos cómo instalar IIS en Windows 10. (El mismo proceso se aplica a Windows 7 y 8.)
Instalar IIS
Llamarlo «instalar» sería demasiado. Al fin y al cabo, IIS es una característica de Windows. Lo que realmente hay que hacer es habilitar la característica. En Windows 10, puedes pulsar la tecla de Windows y escribir «activar las funciones de Windows». Debería ver «Activar o desactivar las características de Windows»
Seleccione eso para abrir el cuadro de diálogo «Características de Windows». Desde aquí, puedes activar todo tipo de características adicionales, incluyendo PowerShell 2.0, un profundo árbol de directorios de opciones para Internet Information Services (IIS), y un subsistema para Linux. (Tengo que decir que esto último me ha resultado útil en numerosas ocasiones, como cuando una aplicación Node tiene algunos scripts de shell como parte de la compilación npm).
¡La opción de Servicios de Información de Internet (IIS) es la que queremos!
Sólo con hacer clic en la casilla correspondiente tendrás un buen punto de partida. Sin embargo, es posible que desee profundizar. World Wide Web Services > Características de desarrollo de aplicaciones es donde se habilita ASP.NET, CGI y el protocolo WebSocket. Siempre puede volver a esto si necesita hacer ajustes.
Para habilitar IIS en Windows Server, puede utilizar PowerShell o el Administrador de servidores para instalar el «Rol Web (IIS)». Consulte este tutorial para obtener más detalles.
Una vez que haya seleccionado todas las características de IIS deseadas, haga clic en Aceptar y vaya a por una taza de café fresca. Cuando la instalación haya terminado, puede acceder a la interfaz gráfica de usuario de IIS escribiendo «IIS» en la búsqueda de Windows o ejecutando «inetmgr».
La interfaz gráfica de usuario
Antes de entrar en detalles, quiero darle una rápida introducción al Administrador de IIS. He resaltado las áreas de interés porque esta cosa es un lío. Es necesario acostumbrarse, pero hay algunas cosas que puedo ofrecer para ayudar, ya que se refiere a conseguir alrededor de aquí.
En primer lugar, hay tres paneles. El de la izquierda tiene los servidores conectados. (También puede conectarse a servidores remotos.) El panel del medio es donde se encuentran todas las características como la seguridad de la aplicación, el registro, el filtrado y la redirección. O si seleccionas «Vista de contenido», verás el contenido aquí en el medio. A la derecha está el panel de acciones. Esto cambia dependiendo del contexto seleccionado.
No estoy seguro de por qué ese pequeño icono extra en la parte inferior derecha está ahí, pero puedes cambiar el tamaño de la ventana allí abajo también.
TIP: puedes hacer clic con el botón derecho del ratón en la mayoría de los iconos y utilizar el menú contextual para realizar las acciones más comunes.
Si expandes la «conexión» en el panel de conexiones, lo primero que deberías ver es «Application Pools», seguido de «Sites». Vamos a centrarnos en ellos en las dos próximas secciones.
Pools de aplicaciones… ¿Qué son y cómo funcionan?
Aquí tienes un vistazo a los pools de aplicaciones que se configuran por defecto en IIS. Como puede ver, hay combinaciones de v2.0 y v4.0, y de clásico e integrado.
La canalización integrada difiere de la canalización clásica en que ASP.NET se integra en la canalización de peticiones de IIS. En el modo clásico, las peticiones tenían que pasar por un pipeline para IIS y otro para ASP.NET. El modo integrado ha sido el preferido desde que se lanzó IIS 7 con Windows Server 2008 y Vista. No utilice el modo clásico a menos que sea necesario. Lo mismo ocurre con la v2.0. Son sólo para soporte de legado. De hecho, si no necesitas esos grupos de aplicaciones, es mejor que los elimines. No necesitamos ningún tipo de basura por ahí.
Un solo grupo de aplicaciones tiene de cero a muchos procesos de trabajo (w3wp.exe) que se ejecutan en un momento dado. Los procesos de trabajo ejecutan instancias de su aplicación.
Creación de grupos de aplicaciones
En el panel «Acciones» de la parte derecha de la ventana de IIS, haga clic en «Añadir grupo de aplicaciones…» para que aparezca el diálogo. Es bastante sencillo. Por lo general, sólo tiene que introducir un nombre y pulsar «Intro» o hacer clic en «Aceptar».
También puede añadir un grupo de aplicaciones haciendo clic con el botón derecho en el nodo «Grupos de aplicaciones» del panel «Conexiones». El consejo de antes ya demuestra su valor!
Usuarios de pool de aplicaciones
IIS crea un usuario virtual para cada pool de aplicaciones (nomenclatura común para pool de aplicaciones). Estos procesos worker se ejecutan como el usuario virtual del app pool por defecto. Pueden ejecutarse como un usuario diferente (una cuenta de dominio, por ejemplo) si necesitan permisos especiales.
Aunque haya eliminado los grupos de aplicaciones del servidor, los usuarios virtuales siguen vivos.
Estos usuarios virtuales siguen teniendo sus propias carpetas estándar, como «Escritorio», «Música» e «Imágenes». No ocupan mucho espacio (110 MB), pero una vez que se elimina el grupo de aplicaciones, esas carpetas de usuario son basura y se pueden eliminar.
Reciclaje del grupo de aplicaciones
Una característica clave de los grupos de aplicaciones es el reciclaje. Por defecto, los app pools se reciclan cada 1740 minutos (29 horas), y cuando el archivo de configuración cambia. Puedes configurar el reciclaje para adaptarlo a tus necesidades. El reciclaje de los grupos de aplicaciones libera la memoria consumida por las aplicaciones que se ejecutan en un grupo de aplicaciones. El reciclaje puede evitar que los procesos fugitivos consuman toda la memoria de su servidor.
¿Qué tipo de cosas utilizan la memoria en su proceso? Todo lo que está en la pila y en la pila -variables estáticas y propiedades, cualquier cosa en la memoria caché, cualquier objeto que sea referenciado por otro objeto, cualquier bloque de memoria que esté esperando ser recolectado por la basura, ya tiene la idea.
Puede elegir qué eventos le gustaría registrar (o no registrar). Como puede ver, no se muestran todas las opciones en el cuadro de diálogo anterior: los «eventos de reciclaje en tiempo de ejecución» no parecen ser configurables. Esto no es del todo cierto.
Un reciclado inicia un nuevo proceso y luego hace girar el proceso actual. El nuevo proceso tendrá, como es de esperar, un nuevo PID. Puede cambiar este comportamiento así como otros comportamientos de reciclaje en «Configuración avanzada…». De hecho, puede editar cualquiera de las configuraciones de reciclaje en este menú. El cuadro de diálogo «Reciclaje…» es redundante en este sentido. Sin embargo, puede desactivar el reciclaje para los cambios de configuración aquí. Sin embargo, probablemente no quieras hacerlo. Su aplicación en ejecución no recibiría las actualizaciones de configuración.
Note que el «reciclaje superpuesto» implica que es posible tener más de una instancia de la aplicación. Debe desactivar esto sólo si su aplicación lo requiere. El reciclaje solapado evita las interrupciones que se producirían si el reciclaje esperara a que el proceso actual agotara las peticiones antes de iniciar el nuevo proceso. En otras palabras, no se manejarían nuevas peticiones hasta que las peticiones actuales se completaran o transcurriera el periodo de tiempo de espera configurable (90 segundos por defecto).
Configuración avanzada
Hay demasiadas configuraciones de app pool para iterar en detalle en este post. Por ahora, un breve resumen tendrá que ser suficiente. Rápidamente voy a traquetear algunos puntos sobre cada una de las áreas de «Configuración avanzada», como se muestra a continuación.
- La configuración «General» le permitirá
- Cambiar las versiones de .NET CLR
- Permitir aplicaciones de 32 bitsaplicaciones de 32 bits
- Cambiar el modo de canalización
- Configurar la longitud de la cola (1000 peticiones por defecto)
- Configurar que se ejecute siempre o bajo demanda
- La opción «CPU» cubre
- Agotamiento
- Afinidad del procesador
- «Modelo de proceso» le permitirá elegir la configuración para
- Identidad
- Tiempo de espera de inactividad
- Máximo de procesos de trabajadores
- Monitoreo de salud (Debe desactivar esto localmente para la depuración porque un depurador detenido no responderá al ping)
- «Orfandad de procesos» es útil para depurar procesos que no responden
- «Protección rápida contra fallos».Fail Protection» es bueno para cuando se quiere configurar las respuestas del balanceador de carga a los fallos
Sites
«Sites» es el nodo junto a «Application Pools» en el nodo del servidor del gestor de IIS. Es aquí donde se añaden y gestionan los sitios web y los sitios FTP (si están instalados). Mientras que los grupos de aplicaciones tienen un diálogo de configuración avanzada, los sitios tienen muchas más opciones de configuración. Los sitios tienen muchas características, cada una con sus propias configuraciones.
Estas características caen bajo tres encabezados en el administrador de IIS:
- ASP.NET (si lo tiene instalado)
- IIS
- Gestión
Menú de contexto
Puede alternar entre «Características» y «Contenido» cuando tiene un sitio seleccionado. Puedes hacer clic con el botón derecho en el sitio y abrir la carpeta desde el menú contextual seleccionando «Explorar». Hay otras cosas que puedes hacer desde este menú contextual, como editar los permisos.
Esto en realidad sólo trae las propiedades de la carpeta del sitio. A partir de ahí, tendrá que cambiar a la pestaña «Seguridad» para editar realmente los permisos.
En la forma típica de Windows, hay varias otras maneras de editar los permisos. Consulte sus sitios de ayuda de Windows favoritos para obtener más información sobre cómo establecer los permisos de las carpetas.
Puede realizar varias tareas comunes desde el menú contextual. Dentro del elemento «Administrar sitio web», puede iniciar y detener el sitio web, abrirlo en el navegador e ir a la configuración avanzada. Definitivamente querremos ver esos, pero primero, hablemos de lo que verás cuando selecciones «Editar enlaces…» que también está disponible en el panel «Acción» como «Enlaces…».
Enlaces
Tendrás que añadir un enlace de sitio en el diálogo «Enlaces…» si estás habilitando HTTPS para tu sitio. También puede establecer el nombre de host y los números de puerto allí. Si tienes otros enlaces para tu sitio, también puedes añadirlos aquí. Tal vez esté utilizando los enlaces net.tcp o net.pipe (si ha añadido las funciones en el servidor y las ha habilitado para el sitio). O puede establecer una dirección IP aquí.
Es posible ejecutar más de un sitio escuchando en el mismo puerto. Para hacer esto, usted usará diferentes nombres de host. Por ejemplo, podrías tener admin.example.com vinculado a tu sitio de administración y blog.example.com vinculado a tu blog. Todo el tráfico de example.com iría a la misma IP (equilibrador de carga/servidor), pero IIS utilizaría la cabecera del host para dirigir el tráfico al sitio apropiado. Estos son útiles para las aplicaciones de marca blanca también: acme.example.com, foo.example.com, bar.example.com.
Configuración básica
«Configuración básica…» es el mismo diálogo que se obtiene cuando se configura el sitio por primera vez. Probablemente no necesitarás ir allí a menos que quieras cambiar el pool de aplicaciones o la ubicación del sitio o si quieres conectarte como un usuario diferente, en lugar de IUSR (pass thru). Si necesita utilizar una cuenta de servicio para acceder al directorio del sitio, puede elegir «Conectar como…» desde el diálogo «Editar sitio».
Nota: debe tener cuidado de asegurar cualquier directorio que utilice en IIS. Puede beneficiarse de la lectura sobre cómo se asegura el directorio inetpub por defecto.
Subsitios y directorios virtuales
Puede alojar varias aplicaciones y directorios virtuales bajo un sitio. Las aplicaciones pueden ejecutarse en sus propios grupos de aplicaciones, pero los directorios virtuales no. Como se muestra a continuación, he configurado una aplicación de administración y un directorio virtual de blog bajo el Sitio2. Se puede acceder a ellos utilizando http://localhost/admin y http://localhost/blog. Ambos responderán con páginas de error incorporadas a menos que haya algo en los directorios.
Los directorios de origen para las sub-aplicaciones y los directorios virtuales no necesitan ser subdirectorios del sitio principal. Puede mantener esos directorios en cualquier lugar que desee. Es posible que desee asignar algunos recursos web comunes (imágenes o archivos JS) a una ruta relativa para múltiples sitios. Los directorios virtuales son perfectos para esto.
Documentos por defecto y de error
Cuando un usuario visita la raíz de su sitio (www.example.com/), se le presentará un documento por defecto. Los documentos por defecto se muestran a continuación. Puede añadir sus propios documentos, eliminar documentos o desactivarlos por completo. Si los desactiva, el usuario obtendrá una fea pantalla de error 403 a menos que haya dado permiso para listar el contenido de la carpeta (no recomendado). Es mejor tener un documento por defecto en su lugar.
He puesto un documento índice en cada directorio: el sitio, la aplicación, y el directorio virtual.
- Site2
- Admin
- index.html
- Blog
- index.html
- index.html
- Admin
- http://localhost/ cargará el documento por defecto en Site2/index.html
- http://localhost/admin/ cargará el documento por defecto en Site2/Admin/index.html
- http://localhost/blog/ cargará el documento por defecto en Site2/Blog/index.html
Si le preocupa que IIS ocupe memoria y CPU en su máquina, no lo haga. A menos que los procesos de los trabajadores se estén ejecutando (y manejando solicitudes con procesamiento pesado), se queda inactivo. Si está viendo un uso intensivo de la CPU, esta guía de solución de problemas puede ayudar, siempre que esté utilizando ASP.NET.
CLI y gestión remota
AppCmd.exe
AppCmd es la herramienta CLI incorporada para configurar y gestionar IIS. Puede utilizarla para crear sitios y grupos de aplicaciones, vincular directorios virtuales y editar configuraciones. Veamos algunas cosas que puede hacer.
En primer lugar, añada %systemroot%\system32\inetsrv\ a su ruta para poder ejecutar appcmd desde un símbolo del sistema en cualquier ubicación.
Ejecute el símbolo del sistema como administrador.
setx PATH "%PATH%;%systemroot%\system32\inetsrv\"
Prueba los siguientes comandos para explorar appcmd:
- Ejecuta appcmd /? para ver el texto de ayuda
- Vea qué aplicaciones se están ejecutando con appcmd list app
- Use appcmd list backup para ver las copias de seguridad de su configuración de IIS
Add site
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81:
Ahora vuelva a listar las aplicaciones. No verás el nuevo sitio que has añadido porque no se considera una app. Si vas a la GUI y actualizas tus sitios, verás el nuevo sitio allí, pero estará roto. Necesitamos añadir una app usando appcmd.
appcmd add app /site.name:"Dummy Site" /path:"/"
Esto sólo añadirá la app al sitio en la raíz. Creará una app llamada «Dummy Site/». Todavía tenemos que vincular la aplicación a un directorio virtual y luego apuntar a una ruta física.
appcmd add vdir /app.name:"Dummy Site/" path:"/"appcmd set vdir "Dummy Site/" /physicalPath:"c:\inetpub\wwwroot"
Esta es la forma verbosa de usar appcmd para crear un sitio IIS. Hay una manera más fácil.
La manera EZ
Puedes ahorrar muchas pulsaciones mientras creas el sitio si estableces el parámetro physicalPath en el primer comando. Esto lo hará todo de una sola vez:
appcmd add site /name:"Dummy Site" /id:10 /bindings:http/*:81: /physicalPath:"c:\inetpub\wwwroot"
Pero conocer los otros comandos te da una mejor idea de cómo funciona realmente una aplicación IIS bajo el capó. En el pasado, he utilizado appcmd en la secuencia de comandos posterior a la construcción de archivos ASP.NET proj para asegurar que el sitio se configuró localmente en las nuevas máquinas de los desarrolladores. También puede hacer una copia de seguridad y restaurar la configuración de IIS usando appcmd.
Desplegando actualizaciones
Para darle una idea más sobre el uso de appcmd, considere hacer lo siguiente:
- Cree una carpeta «sites».
- Cree una subcarpeta para cada sitio.
- Desplegar las versiones en las subcarpetas bajo cada una de ellas.
- Establecer las nuevas versiones.
- Utilizar appcmd para actualizar el sitio para utilizar la nueva carpeta.
Dada una aplicación llamada «Hello World» que apunta a C:\Sites\HelloWorld\1.0.0 y una nueva construcción «1.0.1» que ha sido puesta en escena en C:\Sites\HelloWorld\1.0.1 , cuando es el momento de ir en vivo, entonces usted puede utilizar el siguiente comando para voltear el sitio a la nueva versión:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.1"appcmd recycle apppool /apppool.name:defaultapppool
Y si usted necesita para hacer retroceder su sitio, ejecute lo siguiente:
appcmd set vdir "Dummy Site/" /physicalPath:"c:\Sites\HelloWorld.0.0"appcmd recycle apppool /apppool.name:defaultapppool
Aquí hay una gran guía de Microsoft con más información sobre el uso de AppCmd.
IIS reset
«iisreset» es un ejecutable independiente que se utiliza para detener, iniciar, reiniciar IIS o evento para reiniciar el equipo (/REBOOT). Puedes pasarle un parámetro «computername» para que controle IIS en otro ordenador. Tendrá que ejecutar esto como administrador. A muchos desarrolladores y administradores de sistemas les gusta usar esto después de un despliegue, ¡y tampoco es una mala idea!
PowerShell
PowerShell tiene un poderoso conjunto de herramientas para administrar IIS. También podría enviar el comando iisreset remotamente usando Invoke-Command -ComputerName «computername» -ScriptBlock {iisreset}, siempre y cuando permita la invocación remota de comandos arbitrarios en sus servidores-y eso generalmente no es una buena idea!
A pesar de mis propias preocupaciones de seguridad con el envío de comandos remotos arbitrarios usando PowerShell, el cmdlet de administración de IIS es realmente útil para la administración de servidores web al estilo DevOps. Usted puede comprobar esta documentación para la administración de IIS utilizando PowerShell para tener una idea de lo que puede hacer.
Apagando
A pesar de todas las características, configuraciones y comandos que hemos cubierto en este post, sólo hemos arañado la superficie. Cada característica tiene sus propias configuraciones, y hay muchas extensiones que se pueden añadir mediante la instalación de la extensión del Instalador de la Plataforma Web.
Y con eso, vamos a llevar este post y el servidor IIS a una conclusión:
iisreset /stop
Con APM, las métricas de salud del servidor, y la integración del registro de errores, mejorar el rendimiento de su aplicación con Stackify Retrace. Pruebe su prueba gratuita de dos semanas hoy mismo