質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

692閲覧

WEBサーバーの公開領域内のディレクトリが775でも外部から見られない理由

domidomi

総合スコア34

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/02/09 02:08

ふと気になったので質問させていただきます。

nginx等のwebサーバーを使用して外部に何かを公開する際に、公開領域を指定すると思います。

例えば
railshoge_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:もし正しいとしたら、どんな観点で外部へ公開しては“ダメ”の判定を行っているのでしょうか?

外部へ公開している仕組みを知らないとハッキング出来てしまう環境を作ってしまいそうで怖くなり質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Railsの場合、nginxのドキュメントルートとしてpublic/以下を指定しますが、この中には(見れば分かる通り)そもそもRubyのコードは入っていません。Railsとしてのコード実行は、ファイルを経由せず直接nginxからunicornに流されます。

ということで、質問に即して回答すれば、

  • 質問1…公開ディレクトリの外側にあるから
  • 質問2…間違い(そもそもRubyコードはnginxの配信対象ではない)

Railsの場合はドキュメントルート外のコードをアプリケーションサーバで実行する構成になるのでファイルのまま配信されてしまう心配はないのですが、PHPの場合はApacheに組み込むのが一般的だったからか、ドキュメントルート内にコードを置くケースが多いこともあって、WordPressもデフォルトでは設定ファイルすらドキュメントルートの中に置かれてしまいます

投稿2018/02/09 02:23

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

domidomi

2018/02/09 02:55

大変ありがとうございます、ドキュメントルートにアプリディレクトリを設定しまうという大変恐ろしい事をやってしまっていました・・・おそろしい・・・ お時間があるときで構わないのですが、二つほどお聞きしたいです。 1:railsの配信の仕組みについて以下の流れは正しいでしょうか? 「誰か:リクエストします」⇒「nginx:これはドキュメントルートの内部を参照するリクエストじゃない!unicornさんにおくるやつや!unicornさん頼みます」⇒「unicorn:そのリクエストの内容から俺が捏ね繰り回してアウトプット作ったで!ほれnginxあとは頼んだ」⇒「nginx:ありがとう!このアウトプットを受け取ってくれ誰かさん」⇒「誰か:あぁ来た」 2:phpのケースでは中身が全部外から丸見えということなのでしょうか?それは大丈夫なのですか?
maisumakun

2018/02/09 03:00

PHPでエントリポイント以外のコードの場合は、コードの側で「関数や変数を宣言するだけ(なので間違えてそこにアクセスしても何も出力されない)」「用意されているはずの定数を確認して、なければその場で終了」のような書き方をすることで、直接アクセスされても何も見えないようにしてあります。 もっとも、何かの手違いでPHPが実行されない環境になるとコードはそのまま見えますので、(エントリポイントとなるindex.phpのようなものは別として)コードをドキュメントルート外に出したほうがいいのは言うまでもありません。
domidomi

2018/02/09 03:07

という事はrailsのアプリフォルダがnginxのルートパスに設定されてしまっていても、rubyが必ず起動しているはずだからコードが実行される恐れはあってもコードが読まれる心配はないという事でしょうか?
maisumakun

2018/02/09 03:12

いえ、PHPはもともとHTMLに混ぜることが前提なので特殊な挙動です。Rubyの場合はそのまま見えます。
domidomi

2018/02/09 04:24

なるほどです、とても納得しました。 お時間頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問