はじめに

まだまだWebサーバの知識が浅く、さらにnginxを触る経験の方が多かったため、apacheについては浅い知識しか持ってませんでした。

今回はALBからLaravel(apache)へのヘルスチェックで詰まった際の備忘録です。

Apacheの設定

web.php (ヘルスチェックを受けるルーティング)

Route::get('/health', function () {
return response('OK', 200)->header('Content-Type', 'text/plain');
})->middleware('throttle:60,1');

Dockerfile

COPY ./app/apache/apache.conf /etc/apache2/sites-available/apache.conf
RUN a2dissite 000-default.conf
RUN a2ensite apache.conf

apache.conf

<br />ServerAdmin webmaster@localhost
DocumentRoot /var/www/laravel-app/public

Options Indexes FollowSymLinks
AllowOverride All
Require all granted

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

ヘルスチェックエラー

ALBのヘルスチェックにてエラーになってましたが、具体的なエラー内容はなく「Unhelthy」とだけなっていました。

404ではないことからLaravelではなくApacheのドキュメントルートを見に行ってしまいヘルスチェックファイルが見つからないという線ではないなと考えました。

ローカルでは、問題なく/healthにアクセスすることが可能で、apacheのデフォルト設定ファイルも無効化してカスタムの.confを有効化もしており、頭を悩ませました。

原因

apache.confの<VirtualHost *:8080>で受付ポート設定はできていると考えてましたが、これだけではダメだったようです。

ports.confというファイルがあり、こちらでは80番を利用していました。

そのため、Dockerfile側でビルド時に書き換えるようにしました。

解決

Dockerfile (追記)

RUN sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf