質問: ふと気になったので質問させていただきます。 `nginx`等のwebサーバーを使用して外部に何かを公開する際に、公開領域を指定すると思います。 例えば `rails`で`hoge_app`ディレクトリにアプリケーションを作成した。 `nginx`の公開領域を`hoge_app`ディレクトリに設定する。 のように。 この時`hoge_app`ディレクトリのパーミッションは`775`となっているので、その他のユーザー即ち`ユーザーnginx`さんもこの`hoge_app`を見る事ができる事になっています。 だから外部からリクエストがあったときに`nginx`が中身をいい感じに配信できると思っています。 でもよくよく考えたら`rails`アプリの中身の`ruby`のコードは見る事ができません。(contlollerの内容等) controllerのパーミッションも`775`です。 **質問1:なぜ公開されているにも関わらず外から見る事ができないのでしょうか?** APPサーバーはunicornを使っているのですが、nginxがファイルの内容を配信する前に必ずAPPサーバーを通るから、そのAPPサーバーがこれは外部に出してはダメなファイルだ!と判定しているのでしょうか? **質問2:この見識は正しいのでしょうか?** **質問2-0:もし正しいとしたら、どんな観点で外部へ公開しては“ダメ”の判定を行っているのでしょうか?** 外部へ公開している仕組みを知らないとハッキング出来てしまう環境を作ってしまいそうで怖くなり質問させていただきました。
回答: Railsの場合、nginxのドキュメントルートとして`public/`以下を指定しますが、この中には(見れば分かる通り)そもそもRubyのコードは**入っていません**。Railsとしてのコード実行は、ファイルを経由せず直接nginxからunicornに流されます。 ということで、質問に即して回答すれば、 * 質問1...公開ディレクトリの外側にあるから * 質問2...間違い(そもそもRubyコードはnginxの配信対象ではない) Railsの場合はドキュメントルート外のコードをアプリケーションサーバで実行する構成になるのでファイルのまま配信されてしまう心配はないのですが、PHPの場合はApacheに組み込むのが一般的だったからか、ドキュメントルート内にコードを置くケースが多いこともあって、WordPressもデフォルトでは設定ファイルすらドキュメントルートの中に置かれてしまいます。