어차피 core로 서비스 할것라 굳이 iis 로 서비스할필요없을것 같아서 윈도우 서비스로 등록해서 사용할려고 했습니다.
core가 iis로 서비스 하는 방법이 있다고 하는데 아마도 80 포트로 서비스 할려면 iis 로 배포해야 하나보네요
Research 중인데 80이랑 몇개 포트는 윈도우에서 관리하고
system 에서 점유중이라 안된다는것 같네요
음… 저는 개인 홈페이지 만들 때 딱히 포트를 바꿀 일이 없어서 대충 그냥 UseUrls를 썼습니다.
WebApplicationBuilder 객체의 WebHost 속성을 건드리니까 잘 되더군요~
[글 수정] 참고로 IIS는 안썼습니다. 자체 호스팅입니다.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseUrls("http://0.0.0.0:80", "https://0.0.0.0:443").ConfigureKestrel(kestrelOptions =>
kestrelOptions.ConfigureHttpsDefaults(options =>
options.ServerCertificateSelector = kestrelOptions.ApplicationServices.GetServerCertificateSelector()));
...
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
builder.Services.AddCertUpdater();
...
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
...
app.UseHttpsRedirection();
...
app.Run();
프로세스 이름이 혹시 svchost 따위로 잡히면 여전히 다른 Windows 코어 서비스가 계속 포트를 점유하고 있는 것이고, 그렇지 않다면 서비스나 일반 프로세스일 가능성이 높을 것 같네요. ㅎㅎ
(TMI) 이런 방법으로 프로세스를 찾을 때 svchost 같은 퉁친 프로세스로 조회되는 이유: 몇몇 NT 서비스들은 프로세스 메모리 절약을 이유로 Service Host (svchost) 안에 서비스 코드를 인 메모리로 로드해서 코드를 실행하는 방식으로 서비스를 입주시키는 경우가 있습니다.
그리고 IIS+ANCM (Asp .Net Core Module) 조합이 여전히 의미가 있을 수 있는 또 다른 이유를 하나 생각해볼 수 있는 것이 있습니다.
리눅스라면 Kestrel을 직접 세우기보다 앞 단에 Envoy, Apache HTTPD, Nginx를 붙이는 것을 선호하는 경우가 있습니다. IIS가 이들 웹 서버와 동일한 역할을 해줄 수 있어서 Windows 서버를 사용한다면 굳이 Envoy, Apache HTTPD, Nginx의 Windows 이식판을 찾기보다는 30년 가까이 Windows 플랫폼에서 잘 돌아가는 것이 확실히 검증된 IIS를 대신 쓰는 것도 효율적인 선택일 수 있다고 생각합니다. (단, 웹 소켓, HTTP/2, HTTP/3 같은 최신 기술을 써야 한다면 IIS는 http.sys 커널 드라이버로 웹 요청을 받기 때문에 반드시 Windows Server 2022로 업그레이드가 꼭 필요합니다.)
그리고 이렇게 애플리케이션용 HTTP 서버 앞에 일반 웹 서버를 두는 이유는, 생각보다 검색 엔진 크롤러, 클라우드 서비스들이 제공하는 웹 방화벽, 로드 밸런서 에이전트 같이 비 웹 브라우저 타입의 클라이언트가 웹 요청을 보내오는 경우가 엄청 많은데, 이럴 때 마다 일일이 Kestrel이 나서서 요청을 받고 응답을 처리할 때 부하도 있고, 불필요한 로그가 남는 불편함이 있어 이런 요청은 웹 서버에서 걸러내도록 하기 위함인 것도 있습니다.
예전에 .net 5.0으로 asp.net core 프로젝트를 iis로 돌리니 브라우저에서 요청할 때 hang이 걸리는 경우가 종종 발생했었습니다. 발생하는 시점이 워낙 불규칙해서 원인은 찾지 못했고 iis를 kestrel로 변경하는 것만으로 해결했습니다. 그다음부터는 asp.net core 프로젝트는 무조건 kestrel로 돌리고 있습니다.