Servidor web IIS en Windows 2016 con ASP.NET

Disponer de un servidor web IIS, basado en Internet Information Services, para alojar y dar servicio a aplicaciones ASP.NET empieza a ser muy habitual en los entornos empresariales. De hecho, no sólo uno, sino van proliferando en grupo en nuestras redes.
Estos servidores ya son el soporte vital de muchas aplicaciones. Aplicaciones que mediante un navegador web y la dirección del servidor web, el usuario ya puede trabajar. De hecho, creo que es la tendencia natural de las aplicaciones, abandonar los clientes pesados, más monolíticos de los sistemas operativos, para ir a entornos más abiertos, universales y accesibles para cualquier dispositivo y desde cualquier lugar. Hoy en día, no todo es transformable directamente al formato web, las aplicaciones más pesadas o tareas concretas continúan utilizando los clientes pesados, pero los nuevos proyectos deberían abordarse, en lo posible, con esta infraestructura.
Para que la web funcione, como he mencionado, se requiere de un servicio que la mantenga y gestione. No hay suficiente en tener los archivos web, se tienen que servir de alguna forma y, en este caso, os explicaré como montar el servidor web IIS, basado en Internet Information Services (IIS) sobre Microsoft WIndows 2016 Server, que interprete las aplicaciones escritas con ASP.NET.
Internet Information Services es el servidor web de Microsoft disponible desde la versión Windows NT 3.51, de esto hace mucho tiempo y ha llovido mucho al respecto. No me lo recordéis, que nos hacemos mayores. Es un entorno que, seguramente por el tiempo que hace que trabajo, siempre me he encontrado cómodo. Todo es cuestión de acostumbrarse, tener una necesidad y saber tocar el entramado que pueda haber por debajo. Es cierto que mi lenguaje de programación es el .NET y seguramente de aquí que me encuentre más cómodo, pero no por eso se tiene que dejar de lado otros servidores web como pueden ser Apache o Nginx.
¿Por dónde empezamos? Por disponer de un servidor con Windows Server, 2016 con entorno gráfico para comprender mejor lo que estamos haciendo. ¡En sistemas productivos os recomiendo utilizar el entorno core para este tipo de servicio!
Instalar el servicio de Internet Information Server
Para disponer de nuestro servidor web IIS empezamos instalando el servicio. Desde el Administrador del servidor, en el menú de la parte superior derecha, hacer clic en Administrar > Añadir roles y características.
Seleccionar la instalación basada en un rol o característica y hacer clic en el botón Siguiente.
Seleccionar el servidor donde instalar el rol o característica y hacer clic en el botón Siguiente.
Del listado de roles, marcar el checkbox de servidor web (IIS). Se nos pide, en una ventana aparte, añadir las herramientas de administración, hacer clic en el botón Añadir característica. Hacer clic en el botón Siguiente para continuar.
Del listado de características, depende la plataforma .NET que se necesite para ejecutar la aplicación Web. En el caso de las aplicaciones heredadas de ASP.NET 2.0 y 3 es necesario habilitar el .NET Framework 3.5 para soportarlas. Para asegurar el funcionamiento completo del servidor, marcar el checkbox de la característica .NET Framework 3.5. Y para las aplicaciones con la versión 4, desplegar el .NET Framework 4.6 y marcar el checkbox ASP.NET 4.6. Hacer clic en el botón Siguiente.
Se inicia el asistente de configuración del rol de servidor web IIS, hacer clic en el botón Siguiente.
Seleccionar las características que tiene que ofrecer el servidor web IIS. Com no, las justas y necesarias.
Como más características habilitamos más exponemos el servicio. ¡Por lo tanto, si una cosa no se necesita no se habilita!
La configuración que se nos propone ya sirve, haciendo alguna pequeña modificación:
Web Server Common HTTP features Default Document - OK Directory browsing - Mejor no desplegarla. HTTP Errors - OK Static Content - OK HTTP Redirection WebDAV Diagnostics Health and Diagnostics HTTP Logging - OK Custom Logging Logging Tools ODBC Logging Request Monitor Tracing Performance Static Content Compression - OK Dynamic Content Compression Security Request Filtering - OK Basic Authentication Centralized SSL Certificate Support Client Certificate Mapping Authentication Digest Authentication IIS Client Certificate Mapping Authentication IP and Domain Restrictions - OK URL Authorization Windows Authentication – OK para aplicaciones de Intranet Application Development .NET Extensibility 3.5 - OK .NET Extensibility 4.6 - OK Application Initialization ASP – Para aplicaciones heredadas de la versión 2.0 de .NET ASP.NET 3.5 - OK ASP.NET 4.6 - OK CGI ISAPI Extensions - OK ISAPI Filters - OK Server Side Includes WebSocket Protocol Management Tools IIS Management Console - OK
Hacer clic en el botón Siguiente para continuar.
Marcar el checkbox de reiniciar el servidor, si es necesario, automáticamente durante la instalación. Como que en este caso se ha especificado la instalación del .NET Framework 3.5 es probable que se quiera indicar la ruta de la ISO de instalación, sino se utilizará Internet para descargar el paquete.
Hacer clic en el botón Instalar para proceder a habilitar el servidor web IIS.
Acabada la instalación de los componentes necesarios, se reinicia el equipo y se vuelve al administrador del servidor, para acabar de añadir las características necesarias hasta que se indica que la instalación se ha completado. Hacer clic en el botón Cerrar.
Ya se dispone de un servidor web IIS operativo. Desde el servidor, con un navegador web, se hace la llamada a la dirección http://localhost. El servidor web IIS nos da la bienvenida.
Acceder a la consola del servidor web IIS
Desde el administrador del servidor, en el menú de la parte superior derecha, hacer clic en Herramientas > Administrador de Internet Information Server (IIS).
Se inicia la consola de administración. En la parte izquierda, encontramos el servidor web IIS con el grupo de aplicaciones (ya veremos para que sirven) y los sitios web. A la derecha, las diferentes opciones según donde nos encontramos de la parte izquierda: servidor, grupos de aplicaciones, sitios web, etc…
El sitio web que se crea por defecto se ubica en la ruta: c:\Inetpub\wwwroot. Digamos que no es demasiado aconsejable dejar un sitio en producción en esta ruta. Lo normal es disponer de otro disco duro donde alojar el/los diferente/s sitio/s web y alerta con los permisos que se asignan, ya que de ellos puede depender la seguridad del sitio web.
Crear un sitio web en un servidor IIS
Con el Explorador de Windows crear una nueva carpeta en la raíz del otro disco duro, por ejemplo, principal y dos más (app1 y app2) para aplicaciones. Botón derecho en el espacio en blanco de la raíz del disco duro, hacer clic en Nueva y Carpeta. Para tener las cosas ordenadas, dentro se puede crear una carpeta para cada sitio web.
¡Importante los permisos que se conceden a esta carpeta, ya que tiene relación con la seguridad de la web!
Comprobar los permisos de la carpeta raíz, botón derecho encima de Web Sites y hacer clic en Propiedades.
Hacer clic en la pestaña Seguridad.
Se pueden visualizar los permisos por defecto del volumen donde se ha creado la carpeta, vamos a modificarlos un poco para alojar una aplicación corporativa.
La idea es que la raíz del sitio web sea accesible para todos, sin necesidad de validarse. El sitio web contendrá dos aplicaciones (app1 y app2) en la que será necesario la validación como usuario de Windows, con pertenencia a un grupo de seguridad diferente para cada aplicación.
Hacer clic en el botón Avanzadas para cambiar estos permisos.
Desactivar la herencia de permisos en esta carpeta. Hacer clic en el botón Desactivar la herencia.
Se nos pide convertir los permisos heredados en explícitos o empezar de nuevo. Para facilitar las cosas, seleccionar Convertir los permisos heredados en explícitos.
Eliminar el grupo de usuarios del dominio, seleccionar el grupo y hacer clic en el botón Eliminar.
Añadir los usuarios identificados como acceso anónimo (usuario y grupo) al servidor. Hacer clic en el botón Agregar.
Seleccionar el objeto principal, mejor buscarlo con el buscador haciendo clic en el botón Avanzado y en el botón Buscar ahora. Localizar el grupo IIS_IUSRS y hacer clic en el botón OK, en las dos ventanas, para añadirlo como objeto principal.
Dejar los permisos con sólo LECTURA y EJECUCIÓN, LISTAR CONTENIDO y LECTURA. Hacer clic en el botón OK para continuar.
Repetir el proceso para el objeto IUSR, correspondiente al identificador del usuario anónimo de Internet Information Server.
Aceptar las modificaciones de permisos de la carpeta haciendo clic en el botón OK en las dos ventanas que quedan abiertas.
Comprobar los permisos de las carpetas de dentro de Web Sites. Tienen que haber heredado las modificaciones hechas en la carpeta principal. Botón derecho sobre el nombre de la carpeta, hacer clic en Propiedades. Pestaña Seguridad y tiene que aparecer el grupo IIS_IUSR y el usuario IUSR, sin el grupo de Usuarios del dominio.
Crear un archivo de defecto para sitio web: default.htm, con un contenido simple, por ejemplo:
<html> <head> <title>Welcome to IIS</title> </head> <body> <H1>Servidor Web Internet Information Server - IntraNET</H1> <H2><a href="/app1/">App1</a></H2> <H2><a href="/app2/">App2</a></H2> </body> </html>
Volver a la consola de administración del servidor web IIS para crear el nuevo sitio web con las dos aplicaciones. Botón derecho sobre el sitio existente para dejarlo todo limpio y hacer clic en la acción Borrar, del panel de acciones de la parte derecha, para eliminarlo.
Confirmar la eliminación del sitio web. ¡Tranquilos, hacer clic en el botón Si!
Botón derecho sobre la carpeta Sitios y seleccionar Añadir un sitio web.
Indicar los parámetros correspondientes:
- Nombre del sitio, por ejemplo, Intranet.
- Grupo de aplicaciones. El sistema automáticamente crea un nuevo grupo de aplicaciones con el nombre del nuevo sitio web, dejemos que lo cree ya que es una buena práctica aislar la ejecución de aplicaciones en grupos así, si una aplicación se queda colgada, reiniciando su grupo hay suficiente, sin poner en peligro todo el servicio.
- Ruta física donde alojar el nuevo web. Indicar la ruta que corresponda. Siguiendo el ejemplo para el nuevo sitio web (la unidad que corresponda \Web Sites\principal).
- Protocolo: http o https (este último requiere del certificado correspondiente).
- Dirección IP: Si contesta para todas las direcciones IP del servidor o sólo para una en concreto.
- Puerto: El puerto por donde ofrecerá el servicio. Recordar que el de defecto en entorno web es el TCP 80.
- Nombre del anfitrión. Si el servidor tiene que alojar más un sitio web independiente del otro, es necesario especificar la dirección FQDN de cada sitio web para abrir el que corresponda. Si se deja en blanco y los otros con un nombre especificado, siempre que se pide una dirección que no corresponde a los otros abrirá éste.
- Iniciar el sitio web inmediatamente después de crearlo. Se puede marcar para poner en funcionamiento ya.
Hacer clic en el botón OK cuando todo esté correcto.
¡Se ha creado el nuevo sitio web!
¿Comprobar que el sistema arrancará la página correcta? Hacer clic sobre el nuevo sitio web y en la parte derecha en el icono Documento por defecto.
Por seguridad, eliminar todos los archivos que no correspondan. En el caso del ejemplo, todos menos Default.htm. Seleccionar y en el panel de acciones de la parte derecha, hacer clic en Eliminar.
Comprobar que el nuevo sitio web funciona. Con el navegador acceder a la dirección web del servidor (http://localhost). Aparece la página que se ha creado. ¡Si os sale un error de permisos es que algo os habéis dejado! Revisad que tengáis el grupo de usuarios IIS_IUSR y el usuario IUSR. Naturalmente, los accesos a las dos aplicaciones todavía no funcionarán porque no las hemos creado.
Volviendo a la consola de administración del servidor web IIS, botón derecho sobre el sitio Web que se acaba de crear y seleccionar Añadir aplicación.
Indicar:
- Alias de la aplicación, como debe ser llamada.
- Grupo de aplicaciones. Por defecto cogerá la herencia del sitio principal. Si os conviene se puede crear uno de nuevo, ahora o más adelante, según el rendimiento y problemas que pueda dar la aplicación.
- Ruta física donde se aloja la aplicación. Siguiendo el ejemplo, es la carpeta App1 que se ha creado.
- Precargar la aplicación. En aplicaciones pesadas puede ser conveniente para una mejor respuesta de la web de cara al usuario final.
Hacer clic en el botón OK cuando todo esté correcto.
Seleccionar la aplicación nueva que se acaba de crear. En la parte derecha, hacer clic en Documento por defecto para cambiarlo a default.aspx.
Hacer clic en el botón Agregar para añadir el nombre default.aspx. Seleccionar el nombre Default.htm y hacer clic en el botón Eliminar.
Repetir el proceso para App2.
Para hacer la prueba de concepto, copiar el archivo Default.htm de la carpeta raíz, modificarlo ligeramente para indicar si se encuentra en una aplicación o en otra:
<html> <head> <title>Welcome to APP1</title> </head> <body> <H1>Servidor Web Internet Information Server - APP1</h1> </body> </html>
Y intentamos acceder al sitio de la aplicación, seguramente nos encontraremos con una página en blanco.
¿El motivo? Que el servidor está buscando el archivo .aspx en lugar de .htm. ¡Tenedlo presente! Cambiar los nombres de los archivos por default.aspx, los dos sitios se tienen que visualizar correctamente.
Pero esta no era la intención, sino que tienen que validar usuarios de Windows. ¿Como? Sacando de las propiedades de seguridad de la carpeta el usuario IUSR (recuerdo que corresponde al anónimo de Internet Information Server). Botón derecho sobre la carpeta que contiene la aplicación, hacer clic en Propiedades. Hacer clic en la pestaña Seguridad. Hacer clic en el botón Editar. Añadir el grupo con permisos para esta aplicación (en mi caso APP1) y eliminar el usuario anónimo (IUSR) de Internet Information Server, seleccionándolo y hacer clic en el botón eliminar. Hacer clic en OK en las ventanas abiertas para aplicar los cambios.
Volver al administrador de Internet Information Server. En la parte izquierda, seleccionar la aplicación. De la parte derecha, hacer clic en el icono de Autenticación.
Se nos muestra los métodos de autenticación que permite el servidor. Los que se han habilitado al dar de alta el rol, siempre se pueden modificar añadiendo de más o eliminando los que ya no se utilizan. Ahora nos tenemos que quedar con la autenticación anónima, que no pedirá nombre de usuario y es la que hay activada; y la de Windows que es la que queremos activar. Si se tiene que pedir cualquier tipo de autenticación, siempre, se tiene que deshabilitar la anónima para que se haga esta validación.
Botón derecho encima de autenticación anónima y hacer clic en Desactivar para forzar que se pida un método de autenticación por parte del Internet Information Server.
Seleccionar autenticación de Windows, botón derecho y hacer clic en Activar. Comprobar ahora es el único método aceptado.
Si se accede a la aplicación web mediante un navegador de web desde el propio servidor, o de un equipo del dominio, aparentemente no pasa nada, pero por debajo, el sistema está validando el usuario que tiene la sesión iniciada de Windows en la aplicación es lo que se conoce como el single sign-on.
Para comprobarlo, en el archivo default.aspx que hay en el directorio de la aplicación, añadir una línea para que nos enseñe el nombre de usuario logado:
<H2>Logon: <%Response.Write(HttpContext.Current.User.Identity.Name.Tostring())%> </H2>
Si accedemos de nuevo a la página web se nos muestra el usuario con el cual se ha hecho la autenticación de la sesión HTTP y por lo tanto se puede establecer un nivel de permisos. Desde el servidor, estando logados como administrador y como que éste tiene permisos de acceso al directorio muestra la página correctamente.
En caso de hacerlo desde un equipo externo al del servidor Web o del dominio (si se utilizan permisos de dominio), al acceder a la web se nos pide las credenciales. Introducir las correctas para la aplicación.
El sistema nos identifica correctamente con las credenciales que se acaban de proporcionar. Si el usuario que tiene iniciada la sesión coincide con los permisos en la aplicación no se pide ninguna credencial.
Si se está en un equipo fuera del dominio, si se intenta acceder a la otra aplicación con el primer usuario (usrapp1), que no tiene permiso, al estar fuera del dominio, vuelve a pedir unas credenciales válidas. Si estuviera en el dominio simplemente no me dejaría entrar porque está pasando contínuamente las credenciales del usuario que ha iniciado sesión, sin poder cambiarlo.
Cambiando de usuario permite acceder a la otra aplicación, enseñando el nombre de usuario correcto.
A partir de aquí ya depende de la necesidad de cada aplicación. Digamos que hemos puesto los cimientos para construir cualquier cosa encima.
¿Te ha gustado el artículo? Lo puedes compartir en las redes sociales. También puedes dejar tu opinión, comentario o sugerencia. ¡Gracias!
Similar Posts by The Author:
- Microsoft SQL Server con SMB3
- Microsoft SQL Server amb SMB3
- Containers en Linux
- Containers amb Linux
- Migrar el servidor de archivos a Windows Server 2019
- Migrar el servidor de fitxers a Windows Server 2019
- Puerta enlace a Azure en el Windows Admin Center
- Porta enllaç a Azure en el Windows Admin Center
- Hola mundo! WordPress 5 y Gutenberg
- Hola món! WordPress 5 i Gutenberg
No se si es tarde o temprano pero muchas gracias, busqué por todos lados pero nada tan claro como tu post, muchas gracias.
De nada, me alegra saber que te ha servido.
Hola, como hago para cerrar la sesion?
Lo siento pero no entiendo el comentario. Qué sesión?
Hola !
Tengo un problema a la hora de actualizar de windows server 2012 a 2016,
«Error de servidor en la aplicación ‘/’.
Espero que me puedan ayudar! muchas gracias!
Por la información que me proporcionas poca cosa te puedo decir. Haciendo un poco de predicción, la aplicación que tienes en Windows Server 2012 con qué framework de .NET funciona? Recuerda que si es anterior al 4, debes habilitar la característica de Windows de los Frameworks anteriors (2 y 3.5), para que funcionen las aplicaciones.
Si la aplicación utiliza el ASP.NET core 2 (que no es lo mismo que ASP.NET 2), debes instalar la runtime descargándola de la web: https://www.microsoft.com/net/download/windows
Gracias por el post!
Que tal .. buenas tardes, ojalá puedas ayudarme .. te cuento, tengo 2 Aplicaciones ASP.NET y las estoy alojando en un servidor IIS 10, (seguí todos los pasos de tu manual, muy bueno por cierto) el problema que tengo es que cuando les agrego la dirección en el hostname en la ventana «edit bindings» no puedo ver ningún sitio, pero si le quito el hostname si puedo verlas en modo local o una por una en el utilizando la ip publica del servidor.
Hola Eliceo,
Al añadir el hostname en el apartado de bindings estás indicando que ese sitio web sólo será visible cuando accedes a él con dicho nombre. Por lo tanto, debes poder resolver ese nombre en tu red, ya se modificando el servicio de DNS (en caso de que todos los usuarios deban acceder a él) o modificar el fichero host de la máquina que utilices (en caso de test y pruebas).
Saludos,
Hola!
seguí tus pasos trabajando el sitio sobre una unidad de red y no resultó.
alguna recomendación
Has comprobado la asignación del usuario para el acceso al directorio de la red? Piensa que no puedes acceder con la cuenta de sistema, lo debes hacer asignando un usuario.
Hola, me podrias ayudar como puedo conectarme a mi servidor windows 2016 mediante una direccion publica.
Hola Fernando, a qué te refieres en conectar a un servidor Windows Server 2016 con una dirección pública? Al servidor web del servidor que se cuenta en la entrada? Si es así, simplemente tienes que redirigir los puertos TCP 80 y TCP 443 de tu router de conexión a Internet a la IP del servidor donde está instalado el Windows Server 2016 con el rol de IIS.
Saludos
como hacer para cambiar el local host y tener una dirreccion como «www.algo.net» por ejemplo
Si es solo para el HOST local sin, DNS ni nada por el estilo, editando el archivo, con privilegios de administrador, de:
c:\Windows\System32\drivers\etc\HOSTS
añadiendo una línea del tipo
127.0.0.1 www.algo.net
Ya tendrías el objetivo conseguido. Pero alerta, que deberás hacer lo mismo a todos los equipos de la red, o lo suyo fuera disponer de un DNS interno y hacer la modificación en él.
Hola,
me gustaría que me puedas ayudar en como implementar un servidor de aplicaciones en windows server 2016
no encuentro manuales ni tutoriales acerca del tema
Hola Juan,
Siento comunicarte que no hago estos trabajos a partir de este blog, no es su finalidad. Te animo a buscar una empresa especializada en la materia para que te pueda ayudar de forma local.
Buenas tardes Josep. No es directamente el tema pero quizás sepas algo al respecto. Si tengo uno o varios servidores IIS con NLB configurado, requiero CALs para los usuarios que consumen una aplicación que esté corriendo en ellos?? Gracias de antemano.
La respuesta es si. Con la del dominio de Active Directory, en modo usuario te basta. Si es para servicios web requieres de la licencia Gateway de Web.
Buenas tardes Josep, seguí tu tutorial y todo perfecto. Muchas gracias.
La única pega es que cada vez que publico mi aplicación desde Visual Studio, la página por defecto se resetea desaparecido inicio.aspx y volviendo la predeterminada Default.htm
Gracias de nuevo y un saludo.
Me contesto a mí mismo. Esta es la solución que a mí me ha funcionado.
Hay que definir la página de inicio en web.config de la aplicación ASP.NET
Muchas gracias por el tutorial.
He probado todos los metodos de autenticacion y tengo un comportamiento raro en «Diggest».
Depende del navegador y de la maquina, pero en algun chrome no para de pedir login y a la cuarta o quinta vez ya entra.
En firefox va bien a la primera.
En otras maquinas entra pero no carga el estilo completamente de la web.
Si cambio a basic authentication va todo perfecto.
Alguien sabe porque?
Hola,
se me cambia el formato de hora y para solucionarlo debo reiniciar el ISS constantemente, como puedo solucionarlo para que esta acción no lo tenga que estar realizando manual?.