お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-07-25 16:56:21

oosamuuy
メンバ
登録日: 2009-03-09

Apache2のDocumentRootの設定について。

お世話になっております。

Apache2を利用してWebサーバーを作っています。
Webサーバー自体は快適に動いているのですが、先日ふとしたことでIPアドレスからアクセスしてみるとどうやらDocumentRootの設定がおかしなことに気がつきました。全く設定した覚えのないユーザーの/home/user/public_htmlがDocumentRootになっていました。
バーチャルドメインを使って数個のドメインでアクセスできるようになっていますが、バーチャルドメインの設定欄ではどのブロックにもDocumentRootという設定があるんです。今まであまり気にしたことがなかったのですが、Apache2の設定では本物のDocumentRootはどのように設定するのでしょうか?現在、/var/wwwというデフォルトのDocumentRootをやめています。
固定IPアドレスをとっているのですが、その固定IPでアクセスした際のDocumentRootを設定するにはどうしたらいいんでしょうか?
よろしくお願いします。

オフライン

 

#2 2010-07-26 16:29:07

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

Ubuntu の apache2 というのは、httpd.conf もデフォルトで空ですし、もともとメインホストという概念が無いんじゃないでしょうか。だから、本物の DocumentRoot っていうのは存在しない?と思います。
<VirtualHost *:80>〜</VirtualHost> ディレクティブ内に記述しているホストで、/home/user/public_html を DocumentRoot にしているものは無い、ということなんですよね?

いくつか考えられるのは、ユーザディレクトリの設定(/etc/apache2/mods-available/userdir.confで良いのかな・・・)を有効にしているとか、ディレクトリ・エイリアスを設定しているとか、ですかね・・・。

apache2.conf の内容を見ると、
# Include the virtual host configurations:
Include sites-enabled/
とあり、デフォルトで読み込まれるのは、/etc/apache2/sites-enabled/000-default
のようですので、ここでなんか設定してたりしないでしょうか?

>固定IPアドレスをとっているのですが、その固定IPでアクセスした際のDocumentRootを設定するにはどうしたらいいんでしょうか?
>
とのことですが、IP でアクセスした場合は、VirtualHost ディレクティブの先頭に定義した(メイン)ホストにアクセスしますので、ここに書かれている DocumentRoot にアクセスします。
したがって、ここの DocumentRoot を /home/user/public_html にしていないのであれば、ほかに何らかの設定をしてるんじゃないのかな、と思うんですよね。

※私は、ubuntu の apache2 はローカルでちょっとしたテスト用途にしか使っておらず、公開サーバは、使用しているメール・サーバの関係があって、Windows でやっているので、もしかして間違ったことを書いていたらごめんなさい。
何しろ、Windows と同じ名前のファイルは、httpd.conf しかないですし(しかも、ubuntu のは空だし)。
でも、基本的な考え方や使い方は同じはずなので、何の設定も無しに覚えのないディレクトリに飛ぶはずはないと思うんですよね。

オフライン

 

#3 2010-07-27 23:08:24

oosamuuy
メンバ
登録日: 2009-03-09

Re: Apache2のDocumentRootの設定について。

>petitbootangさん
 いつもお世話になっております。おそらくpetitbootangのご説明は正しいと思うのです。僕も全く自信がないのですが、確かにDocumentRootがどこにもない(はず)なのです。(あるいは全部にDocumentRootがある…とも言えますが…。)
/etc/apache2/sites-enabled/と/etc/apache2/sites-available/でもって各バーチャルサイトを設定しておりますが、バーチャルホストの並び順序を(ファイル内)で変えてみたのですが全く効果なしでしたが、間違いなく/etc/apache2/sites-enabled/000-defaultにIPアドレスで引いた時のバーチャルホストを設定すればいい!のだと思います!これらのファイルの読み込みもファイル名順である可能性が十分あると思いました。

 本日サーバー機の前からの投稿ではないので、報告は明日以降になってしまうます。テストしてみます。
 いつもありがとうございます!

オフライン

 

#4 2010-07-27 23:43:07

zagan
メンバ
登録日: 2008-08-12

Re: Apache2のDocumentRootの設定について。

おそらく御目は通されていらっしゃるとは思いますが、apache.orgのドキュメントに目を通されて、設定の再確認をされておいてください。

次に、設定に間違いが無いと確信されたなら、

コード:

sudo a2dismod userdir

として検証されてみては?

それから、Optionsの項目にIndex

それと一点確認ですが、外部からIPベースでアクセスして表示されるユーザーディレクトリの内容って、なんでしょうか?
ユーザーのファイル一覧が見えるだけですか?とすると、/home/ユーザー名とか/home/*とかってDocumentRootに指定してるはずなんですが・・・

内部ネットワークだったら、クライアントのhostsファイルの確認とかになるのかな?

お話が煮詰まってきたら、設定ファイルを公開したほうが良いかも知れませんね。

オフライン

 

#5 2010-07-27 23:52:17

zagan
メンバ
登録日: 2008-08-12

Re: Apache2のDocumentRootの設定について。

わたし による投稿:

それから、Optionsの項目にIndex

それから、Optionsの項目にIndexesの指定をしているドメインがあれば、そこが怪しいとかって思えちゃうんですが。。。

って書こうとおもってました。

オフライン

 

#6 2010-07-28 14:20:21

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

zagan さんがおっしゃっている通り、IP でアクセスしたときにブラウザでどういう表示がされているのかが気になるところですね。
あと、Options Indexes ですが、Directory ディレクティブの雛型にはもともと記述があるので、それをそのままコピペしていれば、すべてのドメインに記述されてるかもですね。

オフライン

 

#7 2010-07-30 16:04:41

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

もしか、/etc/apache2/conf.d 配下に設定ファイルを記述していれば、そちらの DocumentRoot に /home/user/public_html を設定してたりしないですか?
Ubuntu の apache2 は他の distro や Windows とまったく違ってて、相当に面白いですね。
こちらにわかりやすい解説がありましたよ。
http://uayeb.com/?page_id=181

オフライン

 

#8 2010-07-31 16:10:02

zagan
メンバ
登録日: 2008-08-12

Re: Apache2のDocumentRootの設定について。

もしかして、どこかに

コード:

alias UserDir

とか書いてたりして・・・

オフライン

 

#9 2010-08-02 00:39:51

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

えぇと、今、つらつらと過去ログを見てて気がついたのですが、
https://forums.ubuntulinux.jp/viewtopic.php?id=7782
こちらでやったことと関係あるんじゃないんでしょうか?

オフライン

 

#10 2010-08-02 22:19:31

oosamuuy
メンバ
登録日: 2009-03-09

Re: Apache2のDocumentRootの設定について。

たくさんのご教授ありがとうございます!
>petitbootangさん
https://forums.ubuntulinux.jp/viewtopic.php?id=7782
と関係が大有りな感じがしています。本日ちょっと時間がなくて検証できないのですが、後日報告いたします。
(#3でpetitbootang…と思いっきり呼び捨てですね…。すみません。)

とり急ぎなのですが、IPでアクセスすると、sites-enabled内のリンクファイルのアルファベット順の一番最初のものにアクセスします。aaa, bbb, cccみたいな順番です。aaaを無効にするとbbbがルートになります。特にインデックスみたいなものは表示されていません。

2~3日後になってしまいますがすみません。
いろいろありがとうございます!

オフライン

 

#11 2010-08-02 23:42:49

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

この際、設定ファイルをすべて公開してはいかがでしょうか?自分で書き換えた覚えが無いものも
ドメインとか IP の部分を伏字にしてもらって。

オフライン

 

#12 2010-08-07 01:30:29

oosamuuy
メンバ
登録日: 2009-03-09

Re: Apache2のDocumentRootの設定について。

返信非常に遅くなってすみませんでした。
皆様のアドバイスのおかげではっきりと理解することができました。

Ubuntu/DebianのApache2は、sites-availableとsites-enableで設定をしますが、例えば僕の環境の場合は、127.2.73.xxxというIPアドレスに対してexample.comというドメインを当てていますが、これらの正引き、逆引きに関してDocumantRootを正しく設定するには、単純にsites-enableに置かれるファイル名(リンクファイル名)順であることがわかりました。単純にファイル名をソートした順番の一番最初に読み込まれるファイルがDocumentRootになるようです。

僕のこれまでの設定では、
aaaa.com
example.com
という設定があった場合にexample.comをIPアドレスでダイレクトにアクセスした場合に表示させたいWebディレクトリだったのですが、どうしてもaaaa.comが表示されてしまいました。単純にファイル名を
aaaa.com
000-example.com
とすると、目的のディレクトリがDocumentRootになりました。

本日もまたちょっと時間がないので数日後に正しく設定できたファイルを公開したいと思います。
皆様ありがとうございます!!

オフライン

 

#13 2010-08-07 01:33:55

oosamuuy
メンバ
登録日: 2009-03-09

Re: Apache2のDocumentRootの設定について。

すみません。
ちょっとわかりづらいかな…と思ったので追記です。

/etc/apache2/sites-enable/aaaa.com
/etc/apache2/sites-enable/example.com

という状態を、

/etc/apache2/sites-enable/aaaa.com
/etc/apache2/sites-enable/000-example.com

というファイル名にしたということです。

オフライン

 

#14 2010-08-07 11:33:52

petitbootang
メンバ
From: 東京都
登録日: 2009-02-12

Re: Apache2のDocumentRootの設定について。

ファイル名を変えたことで希望通りの動作になったと言うことは分かりましたが、それでは、DocumentRoot が /home/user/public_html になっているというお話は、どこへ行ってしまったのでしょうか?
結局、aaaa.com の DocumentRoot が /home/user/public_html だったのでしょうか?
取り敢えずはそれで良いとしても、根本的な解決になってるんでしょうか。

オフライン

 

#15 2010-08-07 15:29:32

zagan
メンバ
登録日: 2008-08-12

Re: Apache2のDocumentRootの設定について。

petitbootangさん による投稿:

ファイル名を変えたことで希望通りの動作になったと言うことは分かりましたが、それでは、DocumentRoot が /home/user/public_html になっているというお話は、どこへ行ってしまったのでしょうか?

従来が

oosamuuyさん による投稿:

/etc/apache2/sites-enable/aaaa.com
/etc/apache2/sites-enable/example.com

という順列で置かれていたファイルのうち、/etc/apache2/sites-enable/example.comを000-example.comへとリネームして回避したのであれば、aaa.comまた、000-defaultのDocumentRootの設定が怪しいっすね。って、わざわざIPアドレスでアクセスするって、意味があるのかどうかという疑問もあったり・・・

-> oosamuuyさん

で、読んでいて気付いたのですが、/etc/apache2/sites-enable/へ実体のあるファイルを置かれているようです。
Debian系流儀では、/sites-avalableに実体ファイルを置いて、

コード:

sudo a2ensite file-name

を使用して/sites-enableへ反映させます。

まずは/sites-avalable/defaultを同じディレクトリに別名で保存します。
例えばexample1.comとか言う名前で。
その上で、編集をして

コード:

sudo a2ensite example1.com

とします。/etc/apache2/sites-enable/へリンクが貼られます。
また、そのドメインを閉じたいのであれば、

コード:

sudo a2dissite example1.com

とします。/sites-enableにはもとの設定ファイルが残っているので、いつでも復帰させられます。知ってると便利なコマンドです。

設定を変更したら

コード:

sudo apache2ctl restart
または
sudo /etc/apache2 restart

で設定を反映させてください。

オフライン

 

#16 2010-08-16 23:21:41

oosamuuy
メンバ
登録日: 2009-03-09

Re: Apache2のDocumentRootの設定について。

zaganさん、petitbootangさん、いつもありがとうございます。
結果からいうと根本的な解決ができました。

私のWebサーバーは5つぐらいのユーザーがあるのですが、メインで使用しているドメイン(example.com)の正引きと逆引きで正しくWebサーバーが表示される方がいいなぁと思っていました。(正引きだけでWebサーバーは表示されるので特に問題はないのですが…。)
http://121.xxx.xxx.xxxという風に直接アクセスすると、予期せぬ他のユーザーが表示されてしまい、メインで使用しているドメインの方で表示させたいと思っていた次第です。(正引き、逆引きで同じユーザーが表示されないと信用されないとかいうこととどこかで聞いたことがありましたので…。)

 私がこの度、理解させてもらったのは、いずれにしろWebサーバーはbindとapache2のバーチャルサイトで運用しているので、これらの設定には特にDocumentRootという概念がないに等しいということがわかりました。また、zaganさんがおしえてくださったようにリンクを貼ってバーチャルサイトの設定をしておくということもわかりました。

話がへたくそでちょっとわかりづらかったと思いますので、もう一度説明させてもらいますと、

コード:

aaa.com => /home/aaa/public_html =>[設定ファイル] /etc/apache2/sites-available/aaa
bbb.com => /home/bbb/public_html =>[設定ファイル] /etc/apache2/sites-available/bbb
ccc.com => /home/ccc/public_html =>[設定ファイル] /etc/apache2/sites-available/ccc
example.com => /home/example/public_html =>[設定ファイル] /etc/apache2/sites-available/example
ddd.com => /home/ddd/public_html =>[設定ファイル] /etc/apache2/sites-available/ddd

というようなドメインを持っていまして、それぞれにWebサーバーを当てているのですが、これらのIPアドレスは一つのIPアドレスで引くようになっているのですが、IPアドレスで直接アクセスすると、aaa.comが表示されてしまうということでした。
できれば、example.comが表示されてほしいということで四苦八苦していましたが、単にファイル名を変更するだけで解決できました。

コード:

example.com => /home/example/public_html =>[設定ファイル] /etc/apache2/sites-available/000-example
aaa.com => /home/aaa/public_html =>[設定ファイル] /etc/apache2/sites-available/aaa
bbb.com => /home/bbb/public_html =>[設定ファイル] /etc/apache2/sites-available/bbb
ccc.com => /home/ccc/public_html =>[設定ファイル] /etc/apache2/sites-available/ccc
ddd.com => /home/ddd/public_html =>[設定ファイル] /etc/apache2/sites-available/ddd

example.comの設定ファイルを000-exampleにして、a2ensiteでリンクを貼ってあげればよいという風でした。(たしかに
Apache2をインストールしたてのころに000-defaultというファイルがあったのを思い出しました!)サイトの設定ファイルのソートで一番上にくるユーザーをIPの逆引きの時に表示できるようになりました。

なかなか分かり辛い説明ですみませんでした。
しかし、仕様と意味がわかって大変助かりました。ありがとうございます!

オフライン

 

Board footer

Powered by FluxBB