Nginx 와 결합 하여 asp net core 를 Linux (ubuntu) 에 배치 합 니 다. [마이크로소프트 공식 문서 번역 및 보충]
이 안내 서 는 우 분투 16.04 서버 에 asp. net core 환경 을 배치 하 는 방법 을 소개 한다.아래 지침 은 업 데 이 트 된 우 분투 버 전에 도 적 용 될 것 으로 보이 지만, 우 리 는 테스트 를 하지 않 았 다.
NOTE 는 Ubuntu 14.04 버 전에 대해 서 는 데 몬
supervisord
명령 을 사용 하여 Kestrel 프로 세 스 를 감청 하 는 것 을 권장 합 니 다. systemd
명령 은 Ubuntu 에서 사용 할 수 없습니다. 더 많은 Ubuntu 14.04 에 대한 설명 은 여 기 를 참조 하 십시오.sudo
권한 을 가 진 표준 계 정 이 있 습 니 다. 프로그램 이 로 컬 에서 실행 되 고 안전 한 연결 https 로 설정 되 지 않 으 면 다음 과 같은 방법 을 사용 하 십시오.
Properties/launchSettings.json
속성 인자 applicationUrl
를 제거 https://localhost:5001
개발 환경 에서 실행 dotnet publish
명령 을 실행 하여 응용 프로그램 을 publish 디 렉 터 리 에 포장 합 니 다.dotnet publish --configuration Release
서버 에 배치 하지 않 고 프로그램 을 독립 적 으로 실행 시 키 려 면 이 곳 을 참조 하 십시오.
포 장 된 프로그램, 예 를 들 어 publish / helloapp 는 helloapp 폴 더 를 SCP 나 SFTP 또는 다른 FTP 도 구 를 통 해 서버 에 복사 합 니 다. 일반 사이트 app 은 var / www 디 렉 터 리 에 두 고 ww 디 렉 터 리 가 존재 하지 않 으 면 자체 적 으로 만 드 십시오. 최종 디 렉 터 리 구 조 는 var / www / helloapp 입 니 다.
응용 프로그램 테스트: 1. 명령 행 에서 응용 프로그램 을 실행 합 니 다.
dotnet
2. 브 라 우 저 를 열 고 주소 표시 줄 에 입력 http://:
하여 브 라 우 저가 정상 적 인 내용 을 보 았 는 지 확인 하 십시오.이 사이트 에 문의 할 수 없 는 사이트 가 생기 면 프 록 시 서버 와 방화벽 을 확인 하 십시오.
http://localhost:5000
입 니 다. 이 곳 의 localhost 는 질문 을 할 수 없습니다. http://127.0.0.1:5000
또는 http://0.0.0.0:5000
응용 프로그램 개발 시 Program. cs 파일 에서 Start Up 을 시작 하기 전에 호출 UseUrls("http://*:5000")
또는 UseUrls("http://127.0.0.1:5000")
메모: Nginx 리 버스 에이 전 트 를 사용 하 는 것 을 확인 하면
http://localhost:5000
접근 할 수 없 더 라 도 영향 을 주지 않 습 니 다. 추가 설정 nginx 에이 전 트 를 통 해 접근 할 수 있 습 니 다.public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseStartup();
}
역방향 프 록 시 설정
역방향 대 리 는 동적 웹 애플 리 케 이 션 에 자주 사용 되 는 설정 입 니 다.역방향 에이 전 트 는 HTTP 요청 을 종료 하고 ASP. NET Core 프로그램 에 전송 합 니 다.
역방향 에이전트 사용
Kestrel 은 ASP. NET 핵심 에서 온 동적 콘 텐 츠 에 서 비 스 를 제공 하기에 매우 적합 하 다.그러나 웹 서비스 기능 은 IIS, Apache, nginx 등 서버 처럼 풍부 하지 않다.역방향 프 록 시 서버 는 HTTP 서버 에서 서비스 정적 내용, 캐 시 요청, 압축 요청, HTTPS 종료 등 을 마 운 트 해제 할 수 있 습 니 다.역방향 프 록 시 서버 는 전용 컴퓨터 에 머 물 수도 있 고 HTTP 서버 와 함께 배치 할 수도 있다.
이 매 뉴 얼 에 서 는 nginx 인 스 턴 스 만 사용 합 니 다.HTTP 서버 와 함께 같은 서버 에서 실 행 됩 니 다.필요 에 따라 다른 설정 을 선택 할 수 있 습 니 다.
요청 은 역방향 대리 로 전달 되 기 때문에
microsoft.aspnetcore.httpoverrides
가방 에서 온 퍼 가기 헤드 중간 부품 을 사용 하 십시오.미들웨어 사용 x-forwarded-proto
헤드 업데이트 request.scheme
를 사용 하여 URI 와 다른 보안 정책 이 정상적으로 작 동 하도록 합 니 다.인증, 링크 생 성, 재 설정, 지리 적 위치 등 프로젝트 에 의존 하 는 모든 구성 요 소 는 퍼 가기 헤드 미들웨어 를 호출 한 후에 설정 해 야 합 니 다.일반적인 상황 에서 진단 과 오류 처리 중간 부품 을 제외 하고 전송 헤드 중간 부품 은 모두 다른 중간 부품 보다 먼저 운행 해 야 한다.이 정렬 은 퍼 가기 헤드 정보 에 의존 하 는 중간 부품 을 header values 로 처리 할 수 있 도록 합 니 다.
Startup. cs 파일 의 Configure () 방법 에서
useForwardedHeaders
방법 을 호출 하고 useAuthentication
또는 유사 한 인증 방안 미들웨어 를 호출 하기 전에 설정 해 야 합 니 다.중간 부품 을 설정 하여 전송 x-forwarded-for
과 x-forwarded-proto
헤드:// , nginx .netcore , , netcore IP ,
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
#
app.UseAuthentication();
미들웨어 에 Forward HeadersOptions 를 지정 하지 않 았 다 면, 기본적으로 전송 할 머리 는 none 입 니 다.
기본 적 인 상황 에서 전송 주소 (127.0.0.0 / 8, [: 1] 에서 실행 되 는 에이전트 (표준 로 컬 호스트 주소 (127.0.0.1 포함) 는 신뢰 를 받 습 니 다.조직 내 다른 신뢰 프 록 시 나 인터넷 처리 인터넷 과 웹 서버 간 요청 이 있 으 면
ForwardedHeaders
옵션 이 있 는 KnownProxies
또는 KnownNetworks
목록 에 추가 하 십시오.다음 예제 에 서 는 IP 주 소 를 10.0.0.100 인 신뢰 받 는 프 록 시 서버 를 Startup. cs 파일 의 Configure Services () 방법 에 있 는 퍼 가기 헤드 미들웨어 Known Proxies 에 추가 합 니 다.services.Configure(options =>
{
options.KnownProxies.Add(IPAddress.Parse("10.0.0.100"));
});
더 많은 역방향 에이전트 와 부하 균형 설정 을 참조 하 십시오.
Nginx 설치
apt - get 을 사용 하여 nginx 를 설치 합 니 다.설치 프로그램 은 시스템 이 시 작 될 때 nginx 를 데 몬 으로 실행 하 는 systemd init 스 크 립 트 를 만 듭 니 다.nginx 의 Ubuntu 설치 설명 에 따 르 면 공식 debian / Ubuntu 패키지 입 니 다.
Note 선택 할 수 있 는 nginx 모듈 이 필요 하 다 면 원본 코드 에서 nginx 를 구축 해 야 할 수도 있 습 니 다.
PS: CentOS , sudo yum install nginx nginx
nginx 는 처음 설치 되 었 기 때문에 다음 명령 을 실행 하여 명시 적 으로 시작 하 십시오.
sudo service nginx start
## ,
systemctl enable nginx.service
nginx 를 ASP. NET 핵심 프로그램 에 전송 을 요청 하 는 역방향 에이전트 로 설정 하려 면 / etc / nginx / sites - available / default 를 텍스트 편집기 에서 열 고 해당 하 는 server 노드 부분 을 다음 내용 으로 바 꾸 십시오.
Nginx 설정
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
PS: CentOS , /etc/nginx/nginx.conf
server 없 으 면name 서버 이름 이 일치 할 때 nginx 는 기본 서버 를 사용 합 니 다.기본 서버 가 정의 되 지 않 으 면 설정 파일 의 첫 번 째 서버 는 기본 서버 입 니 다.가장 좋 은 실천 으로 특정한 기본 서버 를 추가 합 니 다. 이 서버 는 설정 파일 에서 상태 코드 404 를 되 돌려 줍 니 다.기본 서버 설정 예제:
server {
listen 80 default_server;
# listen [::]:80 default_server deferred;
return 404;
}
앞의 프로필 과 기본 서버 에 대해 nginx 는 호스트 헤드 example. com 또는 *. example. com 의 포트 80 의 공공 트 래 픽 을 받 습 니 다.이 호스트 와 일치 하지 않 는 요청 은 kestrel 로 전송 되 지 않 습 니 다.nginx 는 일치 하 는 요청 을 kestrel 로 전송 합 니 다. 사이트 주 소 는?http://localhost:5000。더 많은 정보 에 대해 서 는 nginx 가 요청 을 어떻게 처리 하 는 지 참조 하 시기 바 랍 니 다.Kestrel 의 IP / 포트 를 변경 하려 면 Kestrel: 터미널 설정 을 참조 하 십시오.
nginx 설정 이 만들어 지면 설정 파일 의 문법 을 검증 하기 위해 실행
sudo nginx -t
합 니 다.설정 파일 테스트 에 성공 하면 실행 sudo nginx -s reload
을 통 해 nginx 를 강제로 변경 합 니 다.서버 에서 프로그램 을 직접 실행 하려 면 다음 작업 을 수행 하 십시오. 1. app 이 있 는 디 렉 터 리 로 이동 2. 명령 실행
dotnet .dll
서버 에서 프로그램 이 실행 되 고 있 지만 인터넷 으로 응답 할 수 없다 면 서버 의 방화벽 을 확인 하고 포트 80 이 열 렸 는 지 확인 하 십시오.Azure Ubuntu VM 을 사용한다 면 입 소 포트 80 트 래 픽 을 사용 하 는 네트워크 보안 그룹 (NSG) 규칙 을 추가 하 십시오.출구 포트 80 규칙 을 사용 할 필요 가 없습니다. 입 소 규칙 을 사용 할 때 자동 으로 출구 트 래 픽 을 부여 하기 때 문 입 니 다.모니터링 응용 프로그램
서버 설정 은 http: / /: 80 요청 으로 전송 합 니 다.http://127.0.0.1:5000위의 Kestrel ASP. NET 핵심 응용 프로그램 처리, http: /: 80.그러나 nginx 는 Kestrel 프로 세 스 를 관리 하 는 것 으로 설정 되 지 않 았 습 니 다.
systemd
기본 웹 프로그램 을 시작 하고 감시 하기 위해 서비스 파일 을 만 드 는 데 사용 할 수 있 습 니 다.systemd
init 시스템 으로 시작, 정지, 관리 프로 세 스 에 강력 한 기능 을 제공 합 니 다.서비스 파일 생 성
서비스 정의 파일 만 들 기
sudo nano /etc/systemd/system/kestrel-myapp.service
다음은 테스트 파일 입 니 다.
[Unit]
Description=WebAPI On Linux #
[Service]
WorkingDirectory=/var/www/myapp #
ExecStart=/usr/bin/dotnet /var/www/myapp/myapp.dll #
Restart=always #
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10 #
KillSignal=SIGINT #Kill
SyslogIdentifier=dotnet-example #
User=root #
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
Note Linux 에는 대소 문 자 를 구분 하 는 파일 시스템 이 있 습 니 다.ASPNETCOREENVIRONMENT = Production 은 apptsettings. Production. json 이 아 닌 검색 프로필 apptsettings. production. json 을 가 져 옵 니 다.
파일 을 저장 하고 서 비 스 를 사용 합 니 다:
sudo systemctl enable kestrel-myapp.service
서 비 스 를 시작 하고 실행 중인 지 확인 합 니 다.
sudo systemctl start kestrel-myapp.service
sudo systemctl status kestrel-myapp.service
역방향 프 록 시 를 설정 하고 systemd 를 통 해 kestrel 을 관리 한 후 웹 프로그램 이 완전히 설정 되 어 로 컬 컴퓨터 의 브 라 우 저 (http://localhost) 방문 하 다.방화벽 에 막 히 지 않 는 한 원 격 기기 로 도 접근 할 수 있다.응답 헤드 를 검사 할 때 서버 헤드 에 Kestrel 이 서 비 스 를 제공 하 는 ASP. NET 핵심 프로그램 이 표 시 됩 니 다.
접근 로그
kestrel 을 사용 하 는 웹 프로그램 은 systemd 로 관리 되 기 때문에 모든 이벤트 와 프로 세 스 가 집중 적 인 로그 에 기 록 됩 니 다.단, 이 로 그 는 systemd 가 관리 하 는 모든 서비스 와 절차 의 모든 항목 을 포함 합 니 다.kestrel - helloapp. service 특정 항목 을 보 려 면 다음 명령 을 사용 하 십시오.
sudo journalctl -fu kestrel-myapp.service
For further filtering, time options such as
--since today
, --until 1 hour ago
or a combination of these can reduce the amount of entries returned. sudo journalctl -fu kestrel-myapp.service --since "2016-10-18" --until "2016-10-18 04:00"
추가: CentOS 7 에서 슈퍼 바 이 저 데 몬 사용 하기
yum 을 통 해 슈퍼 바 이 저 를 설치 합 니 다. python pip 를 사용 하여 설치 하면 python 2 버 전 을 확보 하 는 것 이 좋 습 니 다. python 3 은 현재 슈퍼 바 이 저 를 사용 할 수 있 지만 pip 를 통 해 설치 하면 이상 이 발생 할 수 있 습 니 다.
yum install supervisor
데 몬 정보 설정
supervisord.d , ini supervisor
cd /etc/supervisord.d
# supervisor .ini
touch myappserver.ini
vim myappserver.ini
# ,
[program:myappserver] # ,supervisord
directory=/var/www/myapp # ,
command=dotnet .dll #
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=10 #
stderr_logfile=/var/log/myappserver.err.log
stdout_logfile=/var/log/myappserver.out.log
슈퍼 visord 데 몬 을 시작 합 니 다. 시작 하면 슈퍼 visord. d 디 렉 터 리 에 있 는 ini 파일 을 실행 합 니 다.
supervisord -c /etc/supervisord.conf
부팅 데 몬 슈퍼 visord 설정
systemctl enable supervisord.service
supervisord 다시 시작
supervisorctl reload
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.