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:
- changez votre projet.json par la lié réponse.
- publiez votre projet sur votre serveur.
- sur le serveur, allez à ...approotsrcVotreprojet dossier et ouvrez une fenêtre de commande.
- Exécuter
dnx web
- ce sera un échec - Exécuter
dnu restore
- Exécuter " dnu construire`
- Exécuter "dnx web" - le serveur web devrait maintenant démarrer un
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.
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();
}
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