config error_page directive doesn't work😢
Closed this issue · 3 comments
下記設定でwebservを起動すると、config_.GetErrorPages(request_.GetURI());
でstd::runtime_error
例外が投げられてしまいます。
config_.GetErrorPagaes("/");
でも同様に例外が投げられてしまいます。
default.conf
error_page 405 ./docs/html/50x.html;
server {
listen 4200;
}
server {
listen 4201;
}
server {
listen 4202;
}
例外が投げられているのは、config.cpp
の135行目であることを確認しました。
Lines 133 to 150 in 0308198
b8f8cb6 のコミットで同様の状態になると思います。
現時点のmainブランチからの変更点はClient::HandleException()
にconfigからディレクティブを取得するように変更した点です。
WebServ
クラスは条件文のネストを浅くしただけで、処理は変わっていません。
今のconfigの仕様でlocationディレクティブが一個もないと、いかなるgetterもno location specifiedエラーになりますね。
Configファイルのエラーの場合はそもそもプログラム自体を終了させてしまっていいんですかね。
今のwebservの仕様的に、rootではなくaliasだけでやっているのでlocationディレクティブが少なくともひとつ必要。
なので以下2パターンが自然だと思います。どっちでも良いと思います。
・configの読み込み時点でlocationを持たないサーバーが一つでもあれば、そこでconfig error出して終了 (webservの仕様重視)
・リクエスト先にlocationがなければ404ですぐ返す(nginxがrootなければ404返すことから)