우분투에서 .ASP NET core Apache 연동

그동안 플랫폼에 구애를 받지않는 Java 기반을 많이 활용하였는데, net core도 리눅스, 맥에서도 구동가능하여
우분투 환경에서 MSA 기반의 인증서버를 구현하여 보았다.

본 내용은 마이크로 소프트의 아래 링크를 참조하여 현재 프로젝트 상황에 맞게 수정하였다.
https://docs.microsoft.com/ko-kr/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1

1. 환경
-NET Core 우분투 설치는 인터넷에 많이 나와있으므로 생략함
-Apache는 개발서버에 설치되어 있는 것을 활용하므로 설치 과정 문서는 생략함

2. 배포
– 비쥬얼 스튜디오 게시를 통해 게시된 폴더를 알집으로 압축하여 우분투에 FTP로 업로드.
– /home/idr/Service/Identity/Identity.WebApi 폴더에 압축을 풀어 배포
– unzip Identity.WebApi.zip -d Identity.WebApi

3. 프록시 서버구성
– 사용자가 Apache를 통해 요청을 하면 .net core의 Kestrel 서버로 전달해주기 위해서는 역방향 프록시 서버를 구성해야 함.
– 정뱡향 또는 역방향프록시에 대한 기술문서는 구글검색을 참고.
– 프로그램상 Startup.cs 파일에 아래와 같이 추가해 준다.
* 테스트해보니 아래처럼 안해도 동작은 한다.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
        ...

	app.UseRouting();

	// Apache 또는 IIS 역방향 프록시
	// using Microsoft.AspNetCore.HttpOverrides;을 해야함
	app.UseForwardedHeaders(new ForwardedHeadersOptions {
			ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
	});
}

4. Apache 구성

4.1 환경설정

cd /etc/apache2/sites-available
vi identity.mbizok.com.conf
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:6002/
ProxyPassReverse / http://127.0.0.1:6002/
ServerName identity.mbizok.com
ServerAlias identity.mbizok.com
ErrorLog /var/log/apache2/error-identity.mbizok.com.log
CustomLog /var/log/apache2/access-identity.mbizok.com.log common

4.2 사이트활성화

a2ensite identity.mbizok.com.conf
service apache2 restart

4.3 로그 확인
– 에러가 발생하여 로그 확인

systemctl status apache2.service

3m<94> 19 16:36:06 moramlinux apache2[19883]: AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/identity.mbizok.com.conf:
3m<94> 19 16:36:06 moramlinux apache2[19883]: Invalid command 'RequestHeader', perhaps misspelled or defined by a module not included in the server configuration

– 아파치 모듈 설치 및 아파치 재시작

a2enmod headers
service apache2 restart

5. Kestrel 서비스
6002 포트로 도는 API 서버를 실행하기 위해 kestrel 서비스를 만들어야 함.

5.1 설정화일
vi /etc/systemd/system/kestrel-identity.mbizok.com.service

[Unit]
Description= Identity Web Api

[Service]
WorkingDirectory=/home/idr/Service/Identity/Identity.WebApi
ExecStart=/usr/bin/dotnet /home/idr/Service/Identity/Identity.WebApi/Identity.WebApi.dll --urls="http://127.0.0.1:6002"
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=idr
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

5.2 서비스 활성화

systemctl enable kestrel-identity.mbizok.com.service

5.3 서비스 시작

systemctl start kestrel-identity.mbizok.com.service

5.4 서비스 상태확인

systemctl status kestrel-identity.mbizok.com.service