はじめに
まだまだ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