使用 Nginx 在 Ubuntu 16.04 上托管 ASP.NET Core

使用 Nginx 在 Ubuntu 16.04 上托管 ASP.NET Core


准备工作

服务器主机:腾讯云主机 Ubuntu 16.04 64位

客户端软件:putty.exe; WinSCP 5.13.2

在 Ubuntu 中安装 ASP.NET Core

微软在 .NET Core指南 提供了在不同操作系统中安装运行 ASP.NET Core 的帮助文档,请选择 linux-prerequisites 部分,并找到和自己服务器所安装操作系统相同的内容进行安装即可。

注册Microsoft密钥为被信任的

在Linux环境中运行ASP.NET Core网站,我们需要安装.NET Core运行时(当然也可以自己实现.NET Core程序的宿主)。

在安装 .NET 之前,需要注册Microsoft密钥,注册产品存储库,并安装所需的依赖项。这只需要在每台机器上完成一次。

打开命令提示符并运行以下命令:

wget -q packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

.NET Core Runtime 和 .NET Core SDK 的区别:

  • .NET Core = 应用运行依赖的 .NET Core Runtime
  • .NET Core SDK = 使用 .NET Core 开发应用 .NET Core Runtime 和 SDK+CLI(Software Development Kit/Command Line Interface) 工具

安装 .NET Core SDK

更新可用于安装的产品,然后安装 .NET SDK。

在命令提示符中,运行以下命令:

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.1.105

.NET Core SDK 可能会发布新的版本,将 dotnet-sdk-2.1.105 更新为对应的版本号即可。

检查安装情况

在终端输入以下命令检查安装是否成功:

dotnet --version

ASP.NET Core 示例程序

创建程序目录

在用户的主目录(/home/ubuntu/)中创建新目录 firstapp,然后进入该目录:

mkdir firstapp
cd firstapp

创建示例程序

直接使用 .NET Core 的命令创建一个 ASP.NET Core 示例网站应用程序,在目录 /home/ubuntu/firstapp 执行命令:

dotnet new mvc

命令运行结果:

The template "ASP.NET Core Web App (Model-View-Controller)" was created successfully.
This template contains technologies from parties other than Microsoft, see https://aka.ms/template-3pn for details.

Processing post-creation actions...
Running ‘dotnet restore‘ on /home/ubuntu/firstapp/firstapp.csproj...
  Restoring packages for /home/ubuntu/firstapp/firstapp.csproj...
  Generating MSBuild file /home/ubuntu/firstapp/obj/firstapp.csproj.nuget.g.props.
  Generating MSBuild file /home/ubuntu/firstapp/obj/firstapp.csproj.nuget.g.targets.
  Restore completed in 857.05 ms for /home/ubuntu/firstapp/firstapp.csproj.
  Restore completed in 24.33 ms for /home/ubuntu/firstapp/firstapp.csproj.

Restore succeeded.

还原整个项目的依赖库

执行命令:

dotnet restore

命令运行结果:

Restore completed in 59.28 ms for /home/ubuntu/firstapp/firstapp.csproj.
Restore completed in 10.83 ms for /home/ubuntu/firstapp/firstapp.csproj.

更改 MVC 项目默认端口号

为防止冲突,先将 ASP.NET Core MVC 程序的默认端口号改为9000。更改端口号的办法:打开项目的 program.cs 文件,添加以下有注释的两行

    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseUrls("http://*:9000")   //指定端口号
                .UseKestrel()  //使用 Kestrel 服务器
                .Build();
    }

发布项目

执行命令:

dotnet publish -c release

命令运行结果:

Microsoft (R) Build Engine version 15.7.177.53362 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Restore completed in 62.23 ms for /home/ubuntu/firstapp/firstapp.csproj.
  Restore completed in 11.54 ms for /home/ubuntu/firstapp/firstapp.csproj.
  firstapp -> /home/ubuntu/firstapp/bin/release/netcoreapp2.0/firstapp.dll
  firstapp -> /home/ubuntu/firstapp/bin/release/netcoreapp2.0/publish/

命令执行完毕后,项目被发布到 /home/ubuntu/firstapp/bin/release/netcoreapp2.0/publish/ 目录下,这个路径太长,访问的时候比较不方便,所以可以创建一个项目运行的目录:/var/www/firstapp/,并将刚才项目发布后的内容复制到该目录中。

创建项目运行目录,执行命令:

sudo mkdir /var/www/firstapp

将发布后的结果复制到运行目录中,执行命令:

sudo scp -r /home/ubuntu/firstapp/bin/release/netcoreapp2.0/publish/* /var/www/firstapp

进入运行目录,运行、测试项目:

 cd /var/www/firstapp
 dotnet firstapp.dll

程序运行结果:

Hosting environment: Production
Content root path: /var/www/firstapp
Now listening on: http://[::]:9000
Application started. Press Ctrl+C to shut down.

根据以上提示,通过地址 http://localhost:9000/http://127.0.0.1:9000 就可以访问到网站。但是,这个只能在服务器网站内部访问,通过外网并不能访问的。

使用 Nginx 反向代理

反向代理是为动态 web 应用程序提供服务的常见设置。 反向代理终止 HTTP 请求,并将其转发到 ASP.NET 核心应用程序。

安装 Nginx

安装命令:

sudo apt-get install nginx

因为是首次安装 Nginx,通过运行以下命令显式启动:

sudo service nginx start

在浏览器地址栏中输入类似于 http://192.168.XXX.XXX:9000 的IP地址或 http://域名:9000 就可以显示 Nginx 的默认登陆页了。

配置 Nginx

若要将 Nginx 配置为转发请求向 ASP.NET Core 应用程序的反向代理,修改 /etc/nginx/sites-available/default。 在文本编辑器中打开它,并将内容替换为以下内容:

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 $http_host;
        proxy_cache_bypass $http_upgrade;
    }
}

Nginx 接受主机标头使用的端口 80 上的公共流量, Nginx 将匹配的请求转发到在 Kestrel http://localhost:9000

测试配置:

sudo nginx -t

显示结果如下所示:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新加载配置:

sudo nginx -s reload

在浏览器中直接输入你的服务器IP地址并访问,就可以看到 ASP.NET Core MVC 应用程序运行的结果了。

监视应用程序

服务器已设置为转发到发出的请求 http://<serveraddress>:80 Kestrel 在上运行 ASP.NET Core 应用到 http://127.0.0.1:9000。 但是,Nginx 未设置来管理 Kestrel 过程。 systemd可以用于创建服务文件以启动和监视基础的 web 应用。 systemd 是一个 init 系统,可以提供用于启动、停止和管理进程的许多强大的功能。

创建服务文件

创建服务定义文件:

sudo nano /etc/systemd/system/kestrel-firstapp.service

下面是应用程序的示例服务文件:

[Unit]
Description=firstapp .NET MVC App running on Ubuntu

[Service]
WorkingDirectory=/var/www/firstapp
ExecStart=/usr/bin/dotnet /var/www/firstapp.dll
Restart=always
RestartSec=10  # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

保存该文件并启用该服务。

systemctl enable kestrel-firstapp.service

启动服务并验证它正在运行。

systemctl start kestrel-firstapp.service
systemctl status kestrel-firstapp.service

使用 WinSCP 管理服务器

腾讯云主机提供了 Web 界的命令窗口,不过这个窗口不支持粘贴,所以在编辑需要输入很多内容的配置文件时,比较不方便。虽然使用 putty.exe 可以进行复制粘贴,但使用 Linux 的 vi/vim 进行文本编辑估计也是很多不熟悉终端操作方式的人的恶梦。

WinSCP 是一个 Windows 环境下使用 SSH 的开源图形化 SFTP 客户端。同时支持 SCP 协议,它的主要功能就是在本地与远程计算机间安全的复制文件,同时也可以在 WinSCP 上直接对 Ubuntu 中的文件进行编辑。

WinSCP 中的管理员限

在编辑 Ubuntu 中某些服务的配置文件、或是上传文件到非用户目录时,需要使用 root 权限,比较简单的做法是开启 root 账号,在需要使用管理员权限的地方使用 root 登录进行操作

启用 root 账号

执行命令:

sudo passwd root

按提示输入 root 账号的密码,如果不怕安全问题,可以使用和 ubuntu 账号一样的密码,方便使用。

Password: //输入密码
Enter new UNIX password: //提示输入新的root帐户密码
Retype new UNIX password:  //再输入一次确认密码

修改成功之后你就可以使用root账号了.

WinSCP 使用 root 连接服务器

在 WinSCP 中编辑配置文件

配置文件的编辑窗口

管理服务器中的文件

使用 root 账号登录,左边窗口定位到要上传文件(如在 Visual Studio 中编辑并发布的项目),右边窗口选到服务器中上传的目录,把文件从左边拖到右边就可以 。

原文地址:https://www.cnblogs.com/mahidol/p/9063180.html

时间: 2024-12-20 18:24:34

使用 Nginx 在 Ubuntu 16.04 上托管 ASP.NET Core的相关文章

在 Ubuntu 16.04 上的 ASP.NET Core 应用开发04:使用 ASP.NET Core Identity 的 IdentityServer4 授权服务器

新建 ASP.NET Core Identity 项目 在新建ASP.NET Core Web 应用程序 窗口中分别选择:ASP.NET Core 2.0,Web应用程序(模型视图控制器)和个人用户账号 项目建立后, 运行方式改为使用控制台运行而不是IISExpress, 以便查看各种debug信息. 打开launchSettings.json: { "profiles": { "IdentityManagerServer": { "commandName

在Ubuntu 16.04上利用Jexus+.Net Core+Linux版SQL Server部署ZKEACMS.Core

百度传课视频地址:https://chuanke.baidu.com/v5849090-223278-1498090.html 一.SQL Server on Linux的安装 官方文档:https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-setup-ubuntu二..Net Core的安装官方文档:https://www.microsoft.com/net/core#linuxubuntu三.Jexus的安装1.安装mono官

在Ubuntu 16.04上用sytemd启动OpenVPN Client的正确方式

Ubuntu 16.04默认使用systemd管理服务的启动.停止.重新启动和状态查看等.由于之前用习惯了sysv的服务管理方式,用sytemd还很不习惯,有很多不甚了了地方.今天中午准备在Ubuntu 16.04上部署一套OpenVPN用于远程管理阿里云的十几台Linux主机,期间遇到了一个关于systemd的问题,在此记录一下,供需要者查看和了解. systemd所管理的服务通常位于:/lib/systemd/system/,如果细心的话会发现有些xxx.service中有带"@"

Ubuntu 16.04上安装SkyEye及测试

说明一下,在Ubuntu 16.04上安装SkyEye方法不是原创,是来自互联网,仅供学习参考. 1.检查支持软件包 gcc,make,vim(optional),ssh,subversionbinutils-dev (bfd)atk-dev (libatk1.0-dev)gtk+-2.0-dev (libgtk2.0-dev)pkg-configpango-dev (libpango1.0-dev)freetype2-dev (libfreetype6-dev)glib-dev (libgli

在Ubuntu 16.04上安装Joomla系统

Joomla !是一个流行的内容管理系统(CMS),它是仅次于Wordpress的第二大流行的CMS.到2017年,约有3.3%的网站使用Joomla !作为他们的CMS.本文介绍了如何在Ubuntu 16.04上一键安装Joomla ! 步骤1:安装Apache更新存储库列表.apt-get update安装Apache web服务器.apt-get install apache2使用 LAMP stack 一键安装包安装Joomla!,我们需要安装MySQL并将其链接到PHP.apt-get

在Ubuntu 16.04上安装Concrete5

介绍 Concrete5是用PHP编写的开源内容管理系统(CMS).它的设计是为了便于使用,并提供了一个允许用户直接从页面编辑内容的web界面.Concrete5可以安装在Ubuntu 16.04上实现一键安装. 先决条件 本教程假设您已经创建了一个新的Vultr云计算实例,运行Ubuntu 16.04,并有根访问权限. 步骤1:安装Apache.MySQL和PHP以及其他依赖项 Comcrete5在一键安装包上运行.您需要安装Apache.PHP.MySQL和许多其他必需的依赖项. apt-g

(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2

(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2 译者注: 原文来自:https://tech.amikelive.com/node-706/comprehensive-guide-installing-caffe2-with-gpu-support-by-building-from-source-on-ubuntu-16-04/?tdsourcetag=s_pctim_aiomsg, 不得不说该文作者知识比较丰富,研究比较深入,环境的配置讲解比较详

在Ubuntu 16.04上使用Apache安装phpBB

PhpBB是一个开源的公告板程序.本文将向您展示如何在Ubuntu 16.04上在Apache webserver上安装phpBB.它是使用phpBB 3.2.1编写的,但是这里提供的说明可能也适用于新版本的phpBB.先决条件本文假设您已经使用Ubuntu 16.04创建了一个Vultr云计算实例,并以root身份登录. 步骤1:安装Apache更新存储库列表.apt-get update安装Apache web服务器.apt-get install apache2步骤2:安装MySQLphp

Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core

第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio 本教程涵盖以下主题: 在 Windows Server 上安装.NET Core Hosting Bundle. 在 IIS 管理器中创建 IIS 站点. 部署 ASP.NET Cor