리눅스 서버에 폴더를 먼저 생성하세요. 예시로 myweb 이라는 이름을 사용합니다. 폴더 권한을 적절히 설정해야 하며, 기본 표준 값은 0755입니다. 0755는 rwxr-xr-x 권한에 해당합니다.
다른 사용자: 읽기 및 실행 권한만 부여 (r-x)
소유자(본인 사용자 계정): 읽기, 쓰기, 실행 모든 권한 보유 (rwx)
그룹 구성원: 읽기 및 실행 권한만 부여 (r-x)
다음으로 Visual Studio에서 프로젝트를 게시합니다. 먼저 빌드 설정을 릴리즈 모드로 전환하고 컴파일을 진행한 뒤, 프로젝트를 우클릭하여 게시를 선택하세요. 게시가 완료되면 FTP 클라이언트를 이용해 게시 폴더의 모든 파일을 방금 만든 myweb 디렉터리로 복사합니다.
cd /usr/myweb
파일 이동이 완료되면 아래 명령어를 실행해 애플리케이션을 백그라운드 프로세스로 실행하세요. 백그라운드로 실행하면 원격 리눅스 SSH 창을 닫아도 프로그램이 계속 동작합니다.
sudo nohup dotnet yourprogramname.dll &Code language: CSS (css)
명령어 끝에 붙은 & 기호는 백그라운드 실행에 필수적입니다. 이 기호를 빼면 포그라운드로 실행되며, 터미널을 닫거나 Ctrl + C를 누르는 즉시 프로그램이 종료됩니다.
실제 사용 예시는 다음과 같습니다: sudo nohup dotnet WebSite.dll &
추가 중요 안내
게시 전에 포트 설정을 진행하세요. .NET MVC 프로젝트 내의 appsettings.json 파일을 열어줍니다.
아래 설정을 템플릿으로 추가하세요.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:8080"
}
}
}
}Code language: JSON / JSON with Comments (json)
이 설정은 8080 포트로 모든 IP 주소의 연결을 허용합니다. Nginx 리버스 프록시와 연동하여 한 대의 리눅스 서버에 여러 도메인을 호스팅할 수 있습니다.
Nginx를 리버스 프록시로만 사용한다면 방화벽에서 포트를 열 필요가 없습니다. 서비스를 로컬 주소에만 바인딩하려면 다음과 같이 설정하세요.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://127.0.0.1:8080"
}
}
}
}Code language: JSON / JSON with Comments (json)
이 설정을 적용하면 애플리케이션은 로컬 요청만 수신하고 외부에서의 직접 연결은 모두 차단합니다.
본 작업의 최종 목표는 abc.com/hello 주소로 이 애플리케이션에 접속하는 것입니다.
그 후 sudo nohup dotnet WebSite.dll & 명령어를 실행해 애플리케이션을 시작합니다.
아래 명령어로 애플리케이션이 정상 실행 중인지 확인하세요: ps -aux | grep WebSite.dll
일치하는 프로세스 항목이 표시되면 서비스가 정상적으로 실행된 것입니다.
Nginx 리버스 프록시 설정 (프록시 기능이 필요하지 않다면 이 부분을 건너뛰세요)
Nginx가 이미 설치된 경우 기본 설정 파일은 /etc/nginx/nginx.conf 경로에 위치합니다.
/etc/nginx/sites-available/default 경로의 사이트 설정 파일을 수정합니다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/web/xxxx;
index index.html index.htm index.nginx-debian.html;
server_name _;
# 메인 사이트
location / {
try_files $uri $uri/ =404;
}
# ✅ 핵심: /hello 경로를 .NET으로 전달
location /hello {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Code language: PHP (php)
수정 내용을 저장한 후 Nginx를 재시작하세요
sudo nginx -t
sudo systemctl restart nginx
이제 .NET MVC 애플리케이션을 재시작합니다.
먼저 ps -aux | grep WebSite.dll로 실행 중인 프로세스를 찾은 뒤, sudo 프로세스 라인 맨 앞의 PID 번호를 확인하세요.
해당 PID로 실행 중인 .NET MVC 인스턴스를 종료합니다.
아래 명령어로 서비스를 다시 실행하세요: sudo nohup dotnet 你的项目.dll –urls http://127.0.0.1:8080 > /dev/null 2>&1 &
전체 기능을 테스트할 차례입니다.
Nginx 재시작
아래 명령어를 실행하세요.
bash
실행:
sudo systemctl restart nginx
.NET이 8080 포트에서 수신 대기
아래 명령어로 .NET 서비스의 작동 상태를 확인하세요.
bash
실행:
curl http://127.0.0.1:8080
터미널에 원본 HTML 내용이 출력되면 정상적으로 동작하는 것입니다.
