NaoyaFukuma / webserv

This is when you finally understand why a URL starts with HTTP
3 stars 0 forks source link

<conf> location / が設定されることが必須とする #42

Closed NaoyaFukuma closed 1 year ago

NaoyaFukuma commented 1 year ago

我々のconfigの仕様では、rootディレクティブをlocationディレクティブ内にしか設定することができないので、 server_nameでルーティング後に、locationでルーティングできない場合にこまる。 なお、Nginxでは、locationディレクティブ内だけではなく、server, http と上位のブロック直下でrootディレクティブを定めることができ、location pathでlocationにルーティングできなくとも、上位のrootディレクティブがドキュメントルートディレクトリを定めることができる。(注

従って、locationでルーティングできない場合を潰すために、"location / { ... }" があることを必須とし、 必須であることを保証するために、ParseErrorとする。

Task

注 Nginxの設定において、http, server, location ブロックすべてに root ディレクティブがない場合、Nginxはデフォルトのドキュメントルートディレクトリを使用しません。そのため、静的ファイルへのリクエストはエラーを返します。

Nginxはその設定ファイルの中で最も具体的な(すなわち、最も深いレベルの)root ディレクティブを使用します。したがって、もし http, server, location ブロックすべてに root ディレクティブが存在しない場合、Nginxはどのディレクトリから静的ファイルを提供すればよいかを知らないため、リクエストは失敗します。

この問題を解決するためには、少なくとも一つのレベル(http, server, location のいずれか)で root ディレクティブを設定する必要があります。これにより、Nginxは静的ファイルを提供するためのディレクトリを知ることができます。

なお、root ディレクティブは、Nginxが静的ファイル(HTML、CSS、JavaScript、画像ファイルなど)を提供するためのディレクトリを指定するためのものです。そのため、静的ファイルの提供が必要ない場合(例えば、すべてのリクエストがプロキシパスされる場合など)は、root ディレクティブがなくても問題はありません。

Chanmachan commented 1 year ago

めちゃめちゃ細かいtypoなんですけど直すにこしたことはないと思うのでメモです

root_directiveの概要のところで imeges->images