Saltar al contenido

¿Cómo consigo que el servidor web de Kestrel escuche solicitudes que no sean de host local?

Posteriormente a buscar en varios repositorios y sitios webs de internet al concluir nos hemos encontrado la solución que te enseñaremos ahora.

Solución:

El archivo de configuración predeterminado utilizado por el servidor Kestrel es hosting.json. El nombre se cambió varias veces en diferentes versiones beta. Si usa ahora project.json con lo siguiente "command" sección

"commands": 
    "web": "Microsoft.AspNet.Server.Kestrel"

luego, durante el inicio del servidor desde la línea de comando,

dnx web

el archivo hosting.json será leído. El archivo


    "server.urls": "http://0.0.0.0:5000"

configurará el servidor para escuchar 5000 en cada dirección IP4. La configuración


    "server.urls": "http://::5000;http://0.0.0.0:5000"

informará para escuchar 5000 tanto en la dirección IP4 como en la IP6.

Se pueden especificar archivos de configuración alternativos por uso ASPNET_ENV variable de entorno o por el uso de --config myconfig1.json (o config=myconfig1.json). Por ejemplo, puede utilizar

SET ASPNET_ENV=Development

y para crear hosting.Development.json archivo con configuración específica. Alternativamente, puede usar project.json con

"commands": 
    "web": "Microsoft.AspNet.Server.Kestrel"
    "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"

e inicie el servidor por uso

dnx webProd

Debo recordar, además, que podría ser necesario que permitas escuchar y registrarte adicionalmente (para empezar dnx web). Es necesario debido al firewall y la seguridad local de escuchar nuevos puertos TCP / HTTP. Algo como a continuación debería hacer que el registro y la escucha local del puerto 5000 para todos (IPv4 e IPv6):

netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=Everyone

Para estar más seguro, puede ajustar la configuración anterior para otorgar derechos mínimos.

ACTUALIZADO: Gracias @BlaneBunderson. Se puede usar * en lugar de la dirección IP (como http://*:5000) para escuchar alguna Direcciones IP4 e IP6 desde cualquier interfaz. Uno debe tener cuidado y no usar estos

  • http://*:5000;http://::5000
  • http://::5000;http://*:5000
  • http://*:5000;http://0.0.0.0:5000
  • http://*:5000;http://0.0.0.0:5000

porque requerirá registrar la dirección IP6 :: o dirección IP4 0.0.0.0dos veces.

Corresponde al anuncio

Técnicamente, cualquier nombre de host que no sea “localhost” o una dirección IPv4 o IPv6 válida hará que Kestrel se vincule a todas las interfaces de red.

Creo que el comportamiento podría cambiarse en el futuro. Por lo tanto, recomendaría usar solo *:5000, 0.0.0.0:5000 y ::5000 formulario para el registro de cualquier dirección informática.

ACTUALIZADO 2: ASP.NET Core RC2 cambia (ver el anuncio) el comportamiento de carga de los valores predeterminados. Uno tiene que hacer cambios en el Main para cargar la configuración de hosting.json y los parámetros de la línea de comandos. A continuación se muestra un ejemplo del uso

public static void Main(string[] args)

    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .AddEnvironmentVariables(prefix: "ASPNETCORE_")
        .AddCommandLine(args)
        .Build();

    var host = new WebHostBuilder()
        .UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000")
        .UseEnvironment("Development")
        .UseConfiguration(config)
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup()
        .Build();

    host.Run();

El código anterior usa tres enlaces: "http://*:1000", "https://*:1234", "http://0.0.0.0:5000" por defecto en lugar de usar el puerto predeterminado 5000 por defecto (para ser exactos, el uso de http://localhost:5000). La llamada de .UseConfiguration(config) son hechos después.UseUrls. Por lo tanto, la configuración cargada desde hosting.json o la línea de comando sobrescribe las opciones predeterminadas. Si uno quita .SetBasePath(Directory.GetCurrentDirectory()) línea entonces la hosting.json se cargará desde el mismo directorio donde se compilará la dll de la aplicación (por ejemplo binDebugnetcoreapp1.0).

Uno puede usar la ejecución como

dotnet.exe run --server.urls=http://0.0.0.0:5000

para sobrescribir la configuración predeterminada (desde UseUrls) y la configuración de "server.urls" propiedad de hosting.json si existe.

De la misma manera, se podría sobrescribir la configuración de ULR estableciendo la variable de entorno

set ASPNETCORE_SERVER.URLS=http://localhost:12541/

luego el inicio predeterminado de la aplicación usando dotnet.exe run utilizará http://localhost:12541/ para encuadernar.

Aquí puede encontrar un ejemplo del uso del enlace HTTPS.

OBSERVACIÓN: El nombre de la variable de entorno se cambia de ASPNETCORE_SERVER.URLS para ASPNETCORE_URLS en versiones posteriores de ASP.NET (consulte aquí la documentación de ASP.NET Core 3.1).

En RC2, la sección de comandos de project.json ya no se usa. Todavía no he conseguido que Kestrel recoja el hosting.json, pero puede configurar programáticamente el puerto en el Main de la aplicación donde se crea y configura el nuevo WebHostBuilder. Simplemente agregue el método .UseUrls () como en la muestra a continuación

    public static void Main(string[] args)
    
        var host = new WebHostBuilder()
            .UseUrls("http://0.0.0.0:5000/")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup()
            .Build();

        host.Run();
    

Si usa asp.net core 2.1 +, modifique la sección de configuración en appsettings.json.

"Kestrel": 
  "EndPoints": 
    "Http": 
      "Url": "http://0.0.0.0:5002"
    
  
,

Si haces scroll puedes encontrar las explicaciones de otros administradores, tú incluso tienes la libertad de mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *