programing

kestrel 웹 서버가 비로컬 호스트 요청을 수신하도록 하려면 어떻게 해야 합니까?

starjava 2023. 5. 17. 22:17
반응형

kestrel 웹 서버가 비로컬 호스트 요청을 수신하도록 하려면 어떻게 해야 합니까?

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

비로컬 호스트 요청을 수신하려면 어떻게 해야 합니까?

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

추신: 진정한 해결책은 관련 질문에 대한 승인되지 않은 답변에 있으며, 엄청난 주의가 필요합니다.단계:

  1. 링크된 답변에 따라 project.json을 변경합니다.
  2. 프로젝트를 서버에 게시합니다.
  3. 서버에서...로 이동합니다.\approot\src\프로젝트 폴더에서 명령 창을 엽니다.
  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/포트 합니다.) 방화벽과 새 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

보안을 강화하기 위해 위의 구성을 조정하여 최소한의 권한을 부여할 수 있습니다.

업데이트됨:@Blane Bunderson에게 감사합니다.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및 명령줄 매개 변수.▁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();
}

는 세합니다."http://*:1000","https://*:1234","http://0.0.0.0:5000"으로 기본 5000을 는 "5000"을하는 경우).http://localhost:5000의 ..UseConfiguration(config)다음과 같이 만들어짐 .UseUrls 따서 로된위에서 입니다.hosting.json또는 명령줄을 사용하여 기본 옵션을 덮어씁니다.를 제거하면 나만제거면하하▁if면..SetBasePath(Directory.GetCurrentDirectory())을 선 에 을줄선다에음▁line에다.hosting.json예: "dll 파일" "dll 파일" "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 바인딩의 사용 예는 여기에서 확인할 수 있습니다.

비고: 환경 변수의 이름이 다음에서 변경되었습니다.ASPNETCORE_SERVER.URLSASPNETCORE_URLSASP.NET의 최신 버전(여기에서 ASP.NET Core 3.1 설명서 참조).

RC2에서는 project.json의 명령 섹션이 더 이상 사용되지 않습니다.아직 Kestrel이 hosting.json을 선택하도록 하지는 않았지만, 새 WebHostBuilder가 생성 및 구성되는 응용 프로그램의 메인에서 포트를 프로그래밍 방식으로 설정할 수 있습니다.그냥 추가.아래 샘플과 같이 Uls() 메서드를 사용합니다.

    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"
    }
  }
},

AspNetCore 3.1+의 경우 파일에 다음 행을 추가하면 됩니다.appsettings.json:

"Urls": "http://*:80"

ASP.NET Core 응용 프로그램을 도커 컨테이너에 넣으려고 하는 경우(비로컬 호스트 주소를 수신해야 하는 경우에 사용하는 경우) 이 사용 사례는 이미 Microsoft에서 작성한 것입니다.https://hub.docker.com/r/microsoft/aspnetcore/ 에서 모든 영광을 보실 수 있습니다.

현재(v1.0.1) 이 문제를 해결하기 위한 핵심 마법은 소스 Docker 파일에 URL 환경 변수 설정이 포함되어 있으며 응용 프로그램이 이 설정을 재정의하려고 시도하지 않는다는 것입니다. (사실, 컨테이너형 응용 프로그램은 내부적으로 실행될 환경에 대해 가능한 한 적게 주장해야 합니다.)

ENV ASPNETCORE_URLS http://+:80

거기에는 별표 대신 더하기 기호가 표시되어 있습니다.저는 사실 링크가 좋은 한 제 답변을 읽는 것보다 위의 도커 허브 링크를 방문하는 것을 추천합니다.버전 1.1이 얼마 남지 않았으며, 앞으로 상황이 다시 바뀔 수도 있습니다.

컨테이너를 실행할 때는 환경 변수 설정에 따라 게스트 포트 80을 표시해야 합니다.예:

docker run -d -p 8000:80 myapp
curl localhost:8000

은 다른옵수것다입니를 수정하는 것입니다.launchSettings.json합니다.교체하다"applicationUrl": "http://localhost:5000",와 함께"applicationUrl": "http://0.0.0.0:5000",이와 같은 경우:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3031"
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication1": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://0.0.0.0:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

합니다.ASPNETCORE_URLShttp://0.0.0.0:5000/.

Visual Studio에서 실행 중인 경우 프로젝트 속성의 디버그 탭에서 환경 변수를 추가합니다.

언급URL : https://stackoverflow.com/questions/34212765/how-do-i-get-the-kestrel-web-server-to-listen-to-non-localhost-requests

반응형