¿Cómo consigo que el servidor web de kestrel escuche solicitudes no localhost?


He desplegado mi c#, asp.net 5, mvc 6 aplicación a un servidor de Windows 2008. He encendido dnx web y está escuchando el puerto 5000 y funciona bien al acceder desde el equipo local.

¿Cómo consigo que escuche solicitudes no localhost?

P.d. Esta pregunta no es un duplicado de this...it se refiere a asp.net pre RC1 al alojar.ini en realidad tenía una .formato ini. Ahora, es JSON y no puedo encontrar ninguna documentación sobre lo que realmente debería estar en él.

P. P. S. La verdadera solución está en la respuesta no aceptada a la pregunta vinculada, con una advertencia masiva. Pasos:

  1. Cambia tu proyecto.json por la respuesta vinculada.
  2. Publica tu proyecto en tu servidor.
  3. En el servidor, vaya a ...\approot\src \ YourProject carpeta y abrir una ventana de comandos allí.
  4. Ejecutar dnx web - fallará
  5. Corre dnu restore
  6. Ejecutar 'dnu build'
  7. Ejecute 'dnx web' - el servidor web ahora debería comenzar bien
Author: Community, 2015-12-11

3 answers

El archivo de configuración predeterminado utilizado por Kestrel server es hosting.json. El nombre fue cambiado varias veces en diferentes versiones beta. Si usa ahora project.json con la siguiente "command" sección

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

Luego durante el inicio del servidor desde la línea de comandos por

dnx web

Se leerá el archivo hosting.json. 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á a listen 5000 tanto en IP4 como en IP6 dirección.

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

SET ASPNET_ENV=Development

Y para crear un archivo hosting.Development.json con una 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 iniciar el servidor mediante el uso

dnx webProd

Tengo que recordar, además, que podría ser necesario que permita escuchar adicionalmente y registrarse (para comenzar dnx web). Es obligatorio debido al firewall y la seguridad local de escuchar nuevos puertos TCP / HTTP. Algo como a continuación debería hacer que el registro local y la escucha 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 ser 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 en cualquier direcciones IP4 e IP6 desde cualquier interfaz. Uno debe ser cuidadoso y no usar http://*:5000;http://::5000, http://::5000;http://*:5000, http://*:5000;http://0.0.0.0:5000 o http://*:5000;http://0.0.0.0:5000 porque requerirá registrar la dirección IP6 :: o la dirección IP4 0.0.0.0 twice .

Corresponde a el anuncio

Técnicamente, cualquier nombre de host que no sea "localhost" o un IPv4 válido o La dirección IPv6 hará que Kestrel se vincule a todas las interfaces de red.

Creo que el comportamiento podría ser cambiado 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.

ACTUALIZADO 2: ASP.NET Core RC2 cambia (ver el anuncio) el comportamiento de cargar 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<Startup>()
        .Build();

    host.Run();
}

El código anterior utiliza tres enlaces: "http://*:1000", "https://*:1234", "http://0.0.0.0:5000" por defecto en lugar de uso el puerto por defecto 5000 por defecto(para ser exactos el uso de http://localhost:5000). La llamada de {[37] } se hacen después .UseUrls. Por lo tanto, la configuración cargada desde hosting.json o la línea de comandos sobrescriben las opciones predeterminadas. Si una línea remove .SetBasePath(Directory.GetCurrentDirectory()) entonces la hosting.json se cargará desde el mismo directorio donde se compilará la dll de la aplicación (por ejemplo bin\Debug\netcoreapp1.0).

Se puede usar la ejecución como

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

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

De la misma manera se podría sobrescriba la configuración de ULR configurando la variable de entorno

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

Entonces el inicio predeterminado de la aplicación usando dotnet.exe run usará http://localhost:12541/ para el enlace.

Puede encontrar aquí un ejemplo del uso del enlace HTTPS.

 78
Author: Oleg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-21 23:32:25

En RC2 la sección comandos del proyecto.json ya no se usa. No he conseguido que el cernícalo recoja al anfitrión.json aún, pero puede configurar programáticamente el puerto en la parte principal de la aplicación donde se crea y configura el nuevo WebHostBuilder. Solo añade .UseUrls () method like in the sample below

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

        host.Run();
    }
 24
Author: Trygve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-20 14:52:12

Si usted está tratando de poner un ASP.NET La aplicación principal dentro de un contenedor docker (que era mi caso de uso para tener que escuchar direcciones no localhost), tenga en cuenta que este caso de uso ya ha sido preparado para usted por Microsoft. Puedes ver toda la gloria en https://hub.docker.com/r/microsoft/aspnetcore /

En la versión actual (v1.0.1) la clave mágica para resolver este problema es que el archivo Dockerfile de origen contiene una configuración de variable de entorno url, y la aplicación no intenta anular esto. (De hecho, una aplicación contenedorizada debe afirmar internamente lo menos posible sobre el entorno donde se ejecutará.)

ENV ASPNETCORE_URLS http://+:80

Tenga en cuenta el signo más en lugar de asterisco allí. De hecho, recomiendo visitar el enlace anterior de dockerhub sobre leer mi respuesta mientras el enlace sea bueno. La versión 1.1 está a la vuelta de la esquina, y las cosas pueden cambiar de nuevo en el futuro.

Al ejecutar el contenedor, asegúrese de exponer el puerto invitado 80, por el configuración de la variable de entorno. Por ejemplo:

docker run -d -p 8000:80 myapp
curl localhost:8000
 4
Author: GrandOpener,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-25 13:45:03