Apache(Linux) + ASP.NET Core(kestrel) の構築
目次
-
- 2.1. Apache を構成する
- 2.2. PathBase の設定
-
- 3.1. 国際化対応の有無
- 3.1.1. 国際化対応を行わないアプリケーションの場合
- 3.1.2. 国際化対応を行うアプリケーションの場合
- 3.1. 国際化対応の有無
参考
Apache 搭載の Linux で ASP.NET Core をホストする
手順
Apache を構成する
Apache の構成ファイルは、/etc/httpd/conf.d/ ディレクトリ内にあります。 Ubuntu 上の Apache では、すべての仮想ホスト構成ファイルが /etc/apache2/sites-available に格納されています。 /etc/httpd/conf.modules.d/ 内のモジュール構成ファイルに加え、拡張子が .conf のファイルがアルファベット順で処理されます。このディレクトリには、モジュールの読み込みに必要な構成ファイルが含まれています。
アプリ用に helloapp.conf という名前の構成ファイルを作成します。
PathBase の設定
プロキシがパスをトリミングする場合は (たとえば、/foo/api/1 を /api/1 に転送)、要求の /foo/api/1 プロパティを設定することによって、リダイレクトとリンクを修正します。
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link href="~/_content/Hoge.Web/css/hoge.common.css" rel="stylesheet" asp-append-version="true" />
<link href="~/_content/Hoge.Web/lib/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet" asp-append-version="true" />
http(s)://サーバー名/ディレクトリ
でアクセスした場合、ディレクトリ名が欠落して
<link rel="stylesheet" href="/lib/bootstrap/dist/css/bootstrap.min.css" />
<link href="/_content/Hoge.Web/css/hoge.common.css" rel="stylesheet" asp-append-version="true" />
<link href="/_content/Hoge.Web/lib/bootstrap-icons/font/bootstrap-icons.css" rel="stylesheet" asp-append-version="true" />
上記のようなパスになってしまう場合がある。(当然、css ファイルが読み込まれない)
※apache のバージョン等によっても挙動が変わる可能性あり
その場合は、以下のように PathBase を指定する。(app.UseRouting(); より前で設定する必要あり)
Program.cs
app.Use((context, next) =>
{
context.Request.PathBase = new PathString("/foo");
return next(context);
});
・・・
app.UseRouting();
Service Unavailable が表示される場合
var\log\httpd\error_log に Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed と表示される。
[Wed Oct 18 00:45:57.139356 2023] [proxy:error] [pid 13137] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
[Wed Oct 18 00:45:57.139416 2023] [proxy:error] [pid 13137] AH00959: ap_proxy_connect_backend disabling worker for (127.0.0.1) for 60s
[Wed Oct 18 00:45:57.139424 2023] [proxy_http:error] [pid 13137] [client 121.119.246.81:60988] AH01114: HTTP: failed to make connection to backend: 127.0.0.1
- SELinux が有効の(ままにする必要がある)場合
/usr/sbin/setsebool -P httpd_can_network_connect 1
- または SELinux を無効に設定する
/etc/sysconfig/selinux
SELINUX=disabled
参考 Linux:CentOS6でmod_proxyが動かない
国際化対応の有無
実行時にICUパッケージが見つからないとエラーが出る
Process terminated. Couldn't find a valid ICU package installed on the system.
国際化対応を行わないアプリケーションの場合
インバリアント モードを有効にするには、ソリューション エクスプローラーで (ソリューションではなく) プロジェクトを右クリックし、 [SCD.csproj の編集] または [SCD.vbproj の編集] を選択します。 次の強調表示された行をファイルに追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
</Project>
以下の3行を追加
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
国際化対応を行うアプリケーションの場合
# yum -y install libicu