ASP.NET Core2.xアプリケーションをUbuntuに公開します

ASP.NET CoreアプリケーションをLinux(Ubuntu)サーバーに公開する方法を簡単に説明します。これらはすべてドキュメントです。

サーバー構造#

ASP.NET Core 2.xには、次の2種類のサーバーがあります。

これらのサーバーは両方とも、アプリケーション(Edge Serverとも呼ばれます)に直接サービスを提供することも、[Load Balancing](https://cloud.tencent.com/product/clb?from=10680)またはリバースプロキシの背後に配置することもできます。

Edge Serverをこのように使用する場合:

この場合、HTTPSを有効にするには、証明書をKestrelまたはHTTP.sysに追加する必要があります。

ただし、これはロードバランシングを実行できず、他のサーバーにトラフィックを送信できないため、将来的に拡張するのは簡単ではありません。

また、IISやNginxなどのリバースプロキシの背後にケストレルを配置した場合:

この場合、リバースプロキシはロードバランサーとして使用でき、HTTPSの証明書を構成する唯一の場所としても使用できます。

今日はこの方法を紹介します。

HTTPS

外部からのhttpsリクエストはリバースプロキシに送信され、HTTPを使用してリクエストをKestrel Serverに転送し、転送時にいくつかの特別なヘッダーを付けます。

この場合、証明書の構成、暗号化、HTTPSなどのタスクはすべてプロキシサーバーに渡されます。

これらの応答は、HTTPSを使用してプロキシによって返されます。

このとき、Proxy Serverまたはロードバランサーは、HTTP接続で内部レイヤーからKestrelへのいくつかのヘッダーを伝送するため、Kestrelは要求が元々HTTPSであったかどうかを認識します。

主にこれらの3つのヘッダー:

ASP.NET Coreコードでは、ForwardHeadersミドルウェアを使用し、Startup.Configureメソッドで変更する必要があります。

その場所は、UseHttpsRedirection、UseAuthentication、UseMvc、UseStaticFilesの前にある必要があることに注意してください。

ミドルウェアの構成は、ASP.NETCoreがXForwardedForヘッダーとXForwardedProtoヘッダーを表示できることを意味します。

Ubuntuに公開#

.NETCoreをインストールします##

まず、.NET Coreランタイムをインストールする必要があります:[https://www.microsoft.com/net/download](https://www.microsoft.com/net/download)

クリックした後、Linuxディストリビューションに応じて対応する手順を選択します。

最後に、dotnet --infoを実行して、インストールが成功したことを確認します。

Nginxをインストールします##

さらに、Nginxをインストールする必要があります。公式ウェブサイトのドキュメントを直接確認してください:[https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x# install-nginx](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x#install-nginx)

インストール後、次のページにアクセスしてください:http:// your ip address / index.nginx-debian.html、次の効果が見られる場合、インストールは成功しています。

サーバー上でソースコードをビルドしてリリース##

次にリリースプログラムです。リリースするには2つの方法があります。

サーバー上で直接ビルドして公開するので、.NET Core SDKをインストールする必要があります:[https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial](https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial)

次に、releaseコマンドを使用できます:** dotnet publish --configuration Release **。

公開されたファイルは** bin / Release / netcoreapp / publish **の下にあります。

次に、公開中のすべてのファイルをターゲットフォルダーにコピーします。

私のターゲットディレクトリには、次のファイルがあります。

dotnet test.dllを実行すると、このプログラムはlocalhost:5000で実行されます。

Nginxを構成する##

次に、Nginxの構成に戻り、/ etc / nginx / sites-availableと入力します。その中にデフォルトのファイルがあり、名前を変更してから、新しいデフォルトのファイルを作成します。

保存後、sudo nginx -tを実行して、この構成ファイルを確認します。

次に、nginx -sreloadを実行してnginxを再起動します。

次に、公開されたプログラムを再度実行する必要があります。dotnettest.dll:

URLを使用してポート80にアクセスすると、自動的にポート5001にジャンプし、接続が失敗します。

これは、プロジェクトでHTTPSリダイレクトがデフォルトで使用されているためです。証明書を持っていないので、デモ用にHTTPSリダイレクトに関連するコードをコメントアウトしてからリリースしました。

上記の手順を繰り返すと、通常、Webサイトのポート80からアクセスできます。

NGINX構成証明書とHTTPS

HTTPSおよび証明書関連のコンテンツを直接構成して、公式ドキュメントを表示します:[https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x #configure-ssl](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x#configure-ssl)

proxy.confを追加してnginx.confを編集した後、nginxを再起動します。

操作によると、実行後にhttpsを使用してWebサイトに正常にアクセスできない場合は、ポート443をバインドできないことが原因である可能性があります。

次のエラーが発生した場合は、nginxエラーログ(/var/log/nginx/error.log)を確認してください。

次のコマンドを実行して解決できます。

sudo fuser -k 443/tcp****service nginx restart

次に、httpsURLに再度アクセスします。

このようにして、通常どおりhttpsWebサイトにアクセスできます。

Recommended Posts

ASP.NET Core2.xアプリケーションをUbuntuに公開します
Ubuntu14.04にGraylog1.xをインストールする方法。
ubuntu16インストールasp.net
Ubuntuでnode.jsプロジェクトをherokuに公開します
Ubuntu14.04にClojureWebアプリケーションをデプロイする方法
Ubuntu19.1へのリモート接続
Ubuntu20.04にアップグレードする方法
Jexus 5.8.2を使用して、CentosでAsp.netコアをデプロイして実行します