Servidor web IIS en Windows 2016 con ASP.NET

19 abril 2016
Josep Ma Solanes 23

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.

servidor-web-iis-001

Seleccionar la instalación basada en un rol o característica y hacer clic en el botón Siguiente.

servidor-web-iis-002

Seleccionar el servidor donde instalar el rol o característica y hacer clic en el botón Siguiente.

servidor-web-iis-003

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.

servidor-web-iis-004

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 4desplegar el .NET Framework 4.6 y marcar el checkbox ASP.NET 4.6. Hacer clic en el botón Siguiente.

servidor-web-iis-005

Se inicia el asistente de configuración del rol de servidor web IIS, hacer clic en el botón Siguiente.

servidor-web-iis-006

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.

servidor-web-iis-007

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.

servidor-web-iis-010

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.

servidor-web-iis-014

 

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

servidor-web-iis-011

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…

servidor-web-iis-012

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.

servidor-web-iis-013

 

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 NuevaCarpeta. Para tener las cosas ordenadas, dentro se puede crear una carpeta para cada sitio web.

servidor-web-iis-015

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

servidor-web-iis-016

Hacer clic en la pestaña Seguridad.

servidor-web-iis-017

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.

servidor-web-iis-018

Desactivar la herencia de permisos en esta carpeta. Hacer clic en el botón Desactivar la herencia.

servidor-web-iis-019

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.

servidor-web-iis-020

Eliminar el grupo de usuarios del dominio, seleccionar el grupo y hacer clic en el botón Eliminar.

servidor-web-iis-021

Añadir los usuarios identificados como acceso anónimo (usuario y grupo) al servidor. Hacer clic en el botón Agregar.

servidor-web-iis-022

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.

servidor-web-iis-023

Dejar los permisos con sólo LECTURA y EJECUCIÓN, LISTAR CONTENIDO y LECTURA. Hacer clic en el botón OK para continuar.

servidor-web-iis-024

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.

servidor-web-iis-025

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.

servidor-web-iis-026

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.

servidor-web-iis-027

Confirmar la eliminación del sitio web. ¡Tranquilos, hacer clic en el botón Si!

servidor-web-iis-028

Botón derecho sobre la carpeta Sitios y seleccionar Añadir un sitio web.

servidor-web-iis-029

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.

servidor-web-iis-030

¡Se ha creado el nuevo sitio web!

servidor-web-iis-031

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

servidor-web-iis-032

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.

servidor-web-iis-033

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.

servidor-web-iis-034

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.

servidor-web-iis-035

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.

servidor-web-iis-036

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.

servidor-web-iis-038

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.

servidor-web-iis-039

Repetir el proceso para App2.

servidor-web-iis-037

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.

servidor-web-iis-041

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

servidor-web-iis-042

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 EditarAñ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.

servidor-web-iis-043

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.

servidor-web-iis-044

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.

servidor-web-iis-045

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.

servidor-web-iis-046

Seleccionar autenticación de Windows, botón derecho y hacer clic en Activar. Comprobar ahora es el único método aceptado.

servidor-web-iis-047

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.

servidor-web-iis-048

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.

servidor-web-iis-049

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.

servidor-web-iis-050

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.

servidor-web-iis-051

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.

servidor-web-iis-052

Cambiando de usuario permite acceder a la otra aplicación, enseñando el nombre de usuario correcto.

servidor-web-iis-053

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:

 

23 comentaris per a
“Servidor web IIS en Windows 2016 con ASP.NET”

  1. No se si es tarde o temprano pero muchas gracias, busqué por todos lados pero nada tan claro como tu post, muchas gracias.

     
  2. 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!

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

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

     
    1. 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,

       
  4. Hola!

    seguí tus pasos trabajando el sitio sobre una unidad de red y no resultó.

    alguna recomendación

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

       
  5. Hola, me podrias ayudar como puedo conectarme a mi servidor windows 2016 mediante una direccion publica.

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

       
  6. como hacer para cambiar el local host y tener una dirreccion como «www.algo.net» por ejemplo

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

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

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

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

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

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

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

     
  11. 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?

     
  12. 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?.

     
Els comentaris estan tancats.