Ответ 1
Конфигурационный файл по умолчанию, используемый сервером Kestrel, hosting.json
. Название было изменено несколько раз в разных бета-версиях. Если теперь вы используете project.json
со следующим разделом "command"
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
то при запуске сервера из командной строки на
dnx web
будет читаться файл hosting.json
. Файл
{
"server.urls": "http://0.0.0.0:5000"
}
настроит сервер для прослушивания 5000 на каждом IP4-адресе. Конфигурация
{
"server.urls": "http://::5000;http://0.0.0.0:5000"
}
сообщит для прослушивания 5000 как на IP4, так и на IP6.
Можно указать альтернативные файлы конфигурации с помощью переменной среды ASPNET_ENV
или путем использования --config myconfig1.json
(или config=myconfig1.json
). Например, вы можете использовать
SET ASPNET_ENV=Development
и создать файл hosting.Development.json
с определенной конфигурацией. В качестве альтернативы вы можете использовать project.json
с помощью
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
"webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}
и запустите сервер с помощью
dnx webProd
Мне нужно дополнительно напомнить, что вам может потребоваться дополнительное прослушивание и регистрация (для запуска dnx web
). Это необходимо из-за брандмауэра и локальной безопасности при прослушивании новых портов TCP/HTTP. Что-то вроде ниже должно сделать локальную регистрацию и прослушивание 5000 портов для всех (IPv4 и 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
Чтобы быть более безопасным, вы можете настроить приведенную выше конфигурацию для предоставления минимальных прав.
ОБНОВЛЕНО: Спасибо @BlaneBunderson. Можно использовать * вместо IP-адреса (например, http://*:5000
) для прослушивания любых адресов IP4 и IP6 с любого интерфейса. Нужно быть осторожным и не использовать http://*:5000;http://::5000
, http://::5000;http://*:5000
, http://*:5000;http://0.0.0.0:5000
или http://*:5000;http://0.0.0.0:5000
, потому что для этого потребуется дважды зарегистрировать адрес IP6 ::
или IP4 адрес 0.0.0.0
.
Соответствует объявлению
Технически любое имя хоста, которое не является "localhost" или действительным IPv4 или IPv6-адрес приведет к связыванию Kestrel со всеми сетевыми интерфейсами.
Я думаю, что поведение может быть изменено в будущем. Таким образом, я бы рекомендовал использовать только формы *:5000
, 0.0.0.0:5000
и ::5000
для регистрации любого IT-адреса.
ОБНОВЛЕНО 2: Изменения в ASP.NET Core RC2 (см. объявление) поведение загрузки значений по умолчанию. Нужно внести изменения в Main
, чтобы загрузить настройки из hosting.json
и параметров командной строки. Ниже приведен пример использования
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();
}
Приведенный выше код использует три привязки: "http://*:1000"
, "https://*:1234"
, "http://0.0.0.0:5000"
по умолчанию вместо использования по умолчанию 5000 портов по умолчанию (точнее, использование http://localhost:5000
). Вызов .UseConfiguration(config)
производится после .UseUrls
. Таким образом, конфигурация, загруженная из hosting.json
или командной строки, перезаписывает параметры по умолчанию. Если удалить строку .SetBasePath(Directory.GetCurrentDirectory())
, то hosting.json
будет загружен из того же каталога, где будет скомпилирована dll приложения (например, bin\Debug\netcoreapp1.0
).
Можно использовать выполнение, например
dotnet.exe run --server.urls=http://0.0.0.0:5000
чтобы перезаписать настройки по умолчанию (от UseUrls
) и настройки из "server.urls"
свойства hosting.json
, если они существуют.
Таким же образом можно перезаписать настройки ULR, установив переменную среды
set ASPNETCORE_SERVER.URLS=http://localhost:12541/
то по умолчанию запуск приложения с помощью dotnet.exe run
будет использовать http://localhost:12541/
для привязки.
Вы можете найти здесь пример использования привязки HTTPS.