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リクエストはリバースプロキシに送信され、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ヘッダーを表示できることを意味します。
まず、.NET Coreランタイムをインストールする必要があります:[https://www.microsoft.com/net/download](https://www.microsoft.com/net/download)
クリックした後、Linuxディストリビューションに応じて対応する手順を選択します。
最後に、dotnet --infoを実行して、インストールが成功したことを確認します。
さらに、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の構成に戻り、/ etc / nginx / sites-availableと入力します。その中にデフォルトのファイルがあり、名前を変更してから、新しいデフォルトのファイルを作成します。
保存後、sudo nginx -tを実行して、この構成ファイルを確認します。
次に、nginx -sreloadを実行してnginxを再起動します。
次に、公開されたプログラムを再度実行する必要があります。dotnettest.dll:
URLを使用してポート80にアクセスすると、自動的にポート5001にジャンプし、接続が失敗します。
これは、プロジェクトでHTTPSリダイレクトがデフォルトで使用されているためです。証明書を持っていないので、デモ用にHTTPSリダイレクトに関連するコードをコメントアウトしてからリリースしました。
上記の手順を繰り返すと、通常、Webサイトのポート80からアクセスできます。
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サイトにアクセスできます。