[c#] 로컬 호스트가 아닌 요청을 수신하도록 kestrel 웹 서버를 얻으려면 어떻게해야합니까?

내 C #, asp.net 5, mvc 6 앱을 Windows 2008 서버에 배포했습니다. 나는 발사했고 dnx web포트 5000을 듣고 있으며 로컬 컴퓨터에서 액세스 할 때 잘 작동합니다.

비 localhost 요청을 수신하려면 어떻게해야합니까?

추신이 질문 은 이것 의 중복이 아닙니다 … host.ini가 실제로 .ini 형식을 가지고있을 때 asp.net pre RC1을 참조합니다. 이제 JSON이고 실제로 무엇이 있어야하는지에 대한 문서를 찾을 수 없습니다.

PPS 실제 해결책은 큰 경고와 함께 연결된 질문에 대한 허용되지 않는 답변 에 있습니다. 단계 :

  1. 연결된 답변에 따라 project.json을 변경하십시오.
  2. 프로젝트를 서버에 게시합니다.
  3. 서버에서 … \ approot \ src \ YourProject 폴더로 이동하여 명령 창을 엽니 다.
  4. 실행 dnx web-실패합니다
  5. 운영 dnu restore
  6. ‘dnu build’실행
  7. ‘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 runhttp://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에서 실행하는 경우 프로젝트 속성의 디버그 탭에서 환경 변수를 추가합니다.


답변