내 C #, asp.net 5, mvc 6 앱을 Windows 2008 서버에 배포했습니다. 나는 발사했고 dnx web
포트 5000을 듣고 있으며 로컬 컴퓨터에서 액세스 할 때 잘 작동합니다.
비 localhost 요청을 수신하려면 어떻게해야합니까?
추신이 질문 은 이것 의 중복이 아닙니다 … host.ini가 실제로 .ini 형식을 가지고있을 때 asp.net pre RC1을 참조합니다. 이제 JSON이고 실제로 무엇이 있어야하는지에 대한 문서를 찾을 수 없습니다.
PPS 실제 해결책은 큰 경고와 함께 연결된 질문에 대한 허용되지 않는 답변 에 있습니다. 단계 :
- 연결된 답변에 따라 project.json을 변경하십시오.
- 프로젝트를 서버에 게시합니다.
- 서버에서 … \ approot \ src \ YourProject 폴더로 이동하여 명령 창을 엽니 다.
- 실행
dnx web
-실패합니다 - 운영
dnu restore
- ‘dnu build’실행
- ‘dnx web’실행-이제 웹 서버가 정상적으로 시작됩니다.
추신 :이 질문에 찬성하는 사람들을위한 것입니다. 구식입니다. 매우 구식입니다!
.NET Core의 초기 버전에 적용되었습니다. 질문과 답변은 확실히 현재 버전의 프레임 워크 (예 : 2.x, 3.x)에는 적용되지 않습니다.
답변
Kestrel 서버에서 사용하는 기본 구성 파일은 hosting.json
. 이름은 다른 베타 버전에서 여러 번 변경되었습니다. project.json
다음 "command"
섹션에서 지금 사용하는 경우
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
그런 다음 명령 줄에서 서버를 시작하는 동안
dnx web
파일 hosting.json
을 읽습니다. 파일
{
"server.urls": "http://0.0.0.0:5000"
}
모든 IP4 주소에서 5000을 수신하도록 서버를 구성합니다. 구성
{
"server.urls": "http://::5000;http://0.0.0.0:5000"
}
IP4 및 IP6 주소 모두에서 5000을 수신하도록 알립니다.
사용 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 포트 수신의 로컬 보안 때문에 필요합니다. 다음과 같이 모든 사용자 (IPv4 및 IPv6)에 대해 5000 포트를 로컬로 등록하고 수신해야합니다.
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
모든 IT 주소 등록에는 , 0.0.0.0:5000
및 ::5000
양식 .
업데이트 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();
}
위의 코드 는 기본적으로 기본 포트 5000을 사용하는 대신 기본적으로 사용하는 세 가지 바인딩 ( "http://*:1000"
, "https://*:1234"
) "http://0.0.0.0: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 바인딩 사용 예를 찾을 수 있습니다 .
참고 : ASP.NET의 이후 버전 에서 환경 변수의 이름이에서 ASPNETCORE_SERVER.URLS
로 변경되었습니다 ASPNETCORE_URLS
( 여기 에서 ASP.NET Core 3.1 설명서 참조 ).
답변
RC2에서는 project.json의 명령 섹션이 더 이상 사용되지 않습니다. 아직 Kestrel이 hosting.json을 선택하지는 않았지만 새 WebHostBuilder가 생성되고 구성되는 애플리케이션의 Main에서 프로그래밍 방식으로 포트를 설정할 수 있습니다. 아래 샘플과 같이 .UseUrls () 메서드를 추가하십시오.
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();
}
답변
asp.net core 2.1 이상을 사용하는 경우 appsettings.json에서 구성 섹션을 수정하십시오.
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
},
답변
ASP.NET Core 애플리케이션을 docker 컨테이너 (비 localhost 주소를 수신해야하는 사용 사례)에 넣으려는 경우이 사용 사례는 Microsoft에서 이미 통합했습니다. https://hub.docker.com/r/microsoft/aspnetcore/ 에서 전체 영광을 볼 수 있습니다.
현재 (v1.0.1)에서이 문제를 해결하기위한 핵심 마법은 소스 Dockerfile에 url 환경 변수 설정이 포함되어 있으며 애플리케이션이이를 재정의하지 않는다는 것입니다. (실제로 컨테이너화 된 애플리케이션은 실행될 환경에 대해 내부적으로 가능한 한 적게 주장해야합니다.)
ENV ASPNETCORE_URLS http://+:80
별표가 아닌 더하기 기호에 유의하십시오. 실제로 링크가 좋은 한 내 대답을 읽는 것보다 위의 dockerhub 링크를 방문하는 것이 좋습니다. 버전 1.1이 곧 출시되며 향후 상황이 다시 변경 될 수 있습니다.
컨테이너를 실행할 때 환경 변수 설정에 따라 게스트 포트 80을 노출해야합니다. 예를 들면 :
docker run -d -p 8000:80 myapp
curl localhost:8000
답변
들어 AspNetCore 3.1 단지 파일에 다음 줄을 추가합니다 appsettings.json
:
"Urls": "http://*:80"
답변
환경 변수 ASPNETCORE_URLS
를로 설정합니다 http://0.0.0.0:5000/
.
Visual Studio에서 실행하는 경우 프로젝트 속성의 디버그 탭에서 환경 변수를 추가합니다.