Comment faire pour que le serveur web de kestrel écoute les requêtes non-localhost?

j'ai déployé mon c#, asp.net 5, mvc 6 application à un serveur windows 2008. J'ai allumé dnx web et il est à l'écoute de port 5000 et fonctionne très bien lors de l'accès à partir de l'ordinateur local.

Comment faire pour qu'il écoute les requêtes non-localhost?

P. S .. Cette question n'est pas une copie de ceci...elle se réfère asp.net préc1 lors de l'hébergement.ini effectivement eu un .format ini. C'est JSON et je n'en trouve pas. la documentation sur ce qui devrait y être réellement.

P. P. S. LA VRAIE solution se trouve dans le non-accepted réponse à la question liée, avec une mise en garde massive. Étapes:

  1. changez votre projet.json par la lié réponse.
  2. publiez votre projet sur votre serveur.
  3. sur le serveur, allez à ...approotsrcVotreprojet dossier et ouvrez une fenêtre de commande.
  4. Exécuter dnx web - ce sera un échec
  5. Exécuter dnu restore
  6. Exécuter " dnu construire`
  7. Exécuter "dnx web" - le serveur web devrait maintenant démarrer un
51
demandé sur Community 2015-12-11 01:18:05

3 réponses

le fichier de configuration par défaut utilisé par Kestrel server est hosting.json . Le nom a été changé plusieurs fois dans différentes versions bêta. Si vous utilisez maintenant project.json avec le suivant "command" section

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

puis lors du démarrage du serveur à partir de la ligne de commande par

dnx web

le fichier hosting.json sera lu. Le dossier

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

configurera le serveur pour écouter 5000 sur chaque adresse IP4. La configuration

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

informera d'écouter 5000 à la fois sur L'adresse IP4 et IP6.

on peut spécifier des fichiers de configuration alternatifs par l'usage ASPNET_ENV variable d'environnement ou par l'usage de --config myconfig1.json (ou config=myconfig1.json ). Par exemple, vous pouvez utiliser

SET ASPNET_ENV=Development

et de créer un fichier hosting.Development.json avec une configuration spécifique. Vous pouvez également utiliser project.json avec

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

et démarrer le serveur par usage

dnx webProd

je dois rappeler en outre qu'il pourrait être nécessaire que vous autorisez en outre écouter et s'inscrire (pour commencer dnx web ). Il est nécessaire en raison du pare-feu et de la sécurité locale de l'écoute des nouveaux ports TCP/HTTP. Quelque chose comme ci-dessous devrait faire l'enregistrement local et l'écoute de 5000 port pour tout le monde (IPv4 et 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

Pour être plus sûr, vous pouvez ajuster la configuration ci-dessus pour accorder des droits minimaux.

mise à JOUR: Merci @BlaneBunderson. On peut utiliser * au lieu de L'adresse IP (comme http://*:5000 ) pour écouter sur n'importe quelle adresses IP4 et IP6 de n'importe quelle interface. Il faut être prudent et ne pas utiliser http://*:5000;http://::5000 , http://::5000;http://*:5000 , http://*:5000;http://0.0.0.0:5000 ou http://*:5000;http://0.0.0.0:5000 parce qu'il faudra enregistrer L'adresse IP6 :: ou Adresse IP4 0.0.0.0 deux fois .

correspond à l'annonce "1519780920

techniquement, tout nom d'hôte qui n'est pas" localhost " ou un IPv4 valide ou L'adresse IPv6 va amener Kestrel à se lier à toutes les interfaces réseau.

je pense que le comportement pourrait être changé à l'avenir. Je recommande donc d'utiliser seulement *:5000 , 0.0.0.0:5000 et ::5000 pour l'enregistrement d'une adresse IT.

UPDATED 2: ASP.NET Core RC2 change (voir l'annonce ) le comportement de chargement des valeurs par défaut. Il faut faire des modifications dans le Main pour charger les réglages de hosting.json et les paramètres de ligne de commande. Ci-dessous est un exemple de l'usage

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();
}

le code ci-dessus utilise trois reliures: "http://*:1000" , "https://*:1234" , "http://0.0.0.0:5000" par défaut au lieu de l'usage le port par défaut 5000 par défaut (pour être exact l'usage de http://localhost:5000 ). L'appel de .UseConfiguration(config) est fait après .UseUrls . Ainsi, la configuration chargée à partir de hosting.json ou la ligne de commande écrase les options par défaut. Si l'on supprime la ligne .SetBasePath(Directory.GetCurrentDirectory()) , alors la ligne hosting.json sera chargée à partir du même répertoire où l'application dll sera compilée (par exemple bin\Debug\netcoreapp1.0 ).

on peut utiliser l'exécution comme

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

pour remplacer les paramètres par défaut (de UseUrls ) et les paramètres de "server.urls" propriété de hosting.json si elle existe.

de la même manière que l'on peut écraser les réglages ULR en réglant la variable d'environnement

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

puis le début par défaut de l'application en utilisant dotnet.exe run utilisera http://localhost:12541/ pour reliure.

vous pouvez trouver ici un exemple de l'usage de la reliure HTTPS.

78
répondu Oleg 2016-05-21 23:32:25

Dans la RC2, la section commandes du projet.json est plus utilisé. Je n'ai pas demandé à Kestrel de récupérer l'hébergement.JSON encore, mais vous pouvez programmatically définir le port dans le principal de l'application où le nouveau WebHostBuilder est créé et configuré. Il suffit d'ajouter .Méthode UseUrls() comme dans l'échantillon ci-dessous

    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
répondu Trygve 2016-05-20 14:52:12

si vous essayez de mettre un ASP.NET application de base dans un conteneur docker (qui était mon cas d'utilisation pour avoir besoin d'écouter des adresses non-localhost), notez que ce cas d'utilisation a déjà été mis en place pour vous par Microsoft. Vous pouvez voir la pleine gloire à https://hub.docker.com/r/microsoft/aspnetcore /

at current (v1.0.1) la magie clé pour résoudre ce problème est que le fichier source contient une variable d'environnement d'url et l'application ne tente pas d'outrepasser cela. (En effet, une application conteneurisée devrait s'affirmer aussi peu que possible à l'interne sur l'environnement où elle s'effectuera.)

ENV ASPNETCORE_URLS http://+:80

Notez le signe plus plutôt que l'astérisque. Je recommande en fait de visiter le lien dockerhub ci-dessus au-dessus de la lecture de ma réponse pour aussi longtemps que le lien est bon. La Version 1.1 approche à grands pas, et les choses pourraient changer à nouveau à l'avenir.

lors de l'exécution du conteneur, assurez-vous d'exposer guest port 80, selon le réglage de la variable d'environnement. Par exemple:

docker run -d -p 8000:80 myapp
curl localhost:8000
4
répondu GrandOpener 2016-10-25 13:45:03