アプリ版:「スタンプのみでお礼する」機能のリリースについて

apacheを使っています。設定ファイルhttpd.confには
LoadModule userdir_module modules/mod_userdir.so
という記述があるにも関わらず、
$ httpd -lコマンドを実行しても、
mod_userdir.c
が表示されていません。

これでは、httpd.conf中に、
UserDir /home/*/public_html
を記述しても、public_htmlにアクセスされても
Pages not found
となってしまいます。

mod_userdir.cを組み込む方法をご教授ください。

A 回答 (4件)

> 今度は、


> Forbidden
> You don't have permission to access ~
> というエラーが出てしまいました。
>
> 対象のディレクトリやファイルは
> chmod 755
> としているのでアクセス権はあるはずなのですが・・・。
うむすばらしい。一歩前に進んだじゃないか。さて、クライアント側にこいつ(403)が返る時、原因は2つある。

1.apacheがファイルシステムにアクセスできない。
 質問者が言っているchmod 755のことで、確実に755になっているのであれば問題ない。が、ひょっとしたら/home/mksa/public_htmlは755だけど、/home/mksaが700になっていて、そっちで弾かれているという可能性もある。この辺も、ネット上に「/home/mksa/public_htmlが755ならその親がどうであろうと関係ない」という情報も流れているが、私個人は親が700だったらダメなんじゃないかなぁと思う。
 ちなみにapacheは普通ユーザーnobodyさん辺りが所有するプロセスになるため、ユーザーmksaが所有するファイルから見ればothersになる。
 ところで、今/home/mksa/public_htmlも/home/mksaも755じゃないといけないと言ったけど、そうすると一般ユーザーがお互いのhomeを見れる事になるので、実際にシステムを構築する際には/var/www/users/*/public_htmlなどとhome以外を使うというのも手だ。

2.apacheの設定でクライアント(Webブラウザ)にアクセスさせない。
 これはhttpd.confで<Directory>ディレクティブや<Location>ディレクティブの設定によりアクセス制御を行うもので、例えば
~~~~~~~~start
<Directory />
order deny,allow
deny from All
</Directory>

UserDir /home/*/public_html
~~~~~~~~end
となっていると、ファイルシステム全体が全て拒否されている状態で/home/mksa/public_htmlもその庇護下に置かれる。
~~~~~~~~start
<Directory />
order deny,allow
deny from All
</Directory>

UserDir /home/*/public_html

<Directory "/home/*/public_html">
order deny,allow
deny from All
allow from All
</Directory>
~~~~~~~~end
として、ユーザーごとのディレクトリー以下は基本全て許可するという風に設定してみると良い。ただ、大抵のディストリビューションの標準のhttpd.confはこの辺りは最初から設定されていると思うんだけどね。

これでも403になるようなら、apacheが吐き出すアクセスログを調べてみると良いだろう。
    • good
    • 0

user 名 が mksa ならば


# chmod o+x /home/mksa
とすれば良いはずですが。
    • good
    • 0

# httpd -l


Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

# httpd -M
---------------------
---------------------
speling_module (shared)
userdir_module (shared)
alias_module (shared)
rewrite_module (shared)
------------------------
$ man httpd
-l Output a list of modules compiled into the server.
This will not list dynamically loaded modules included
using the LoadModule directive.

public_html の 下に、index.html が有れば
特に問題はないと思うし、問題は無かった。
    • good
    • 0

$ httpd -l


というコマンドは、Apache 1.3.4~、Apache 2.0.x、Apache 2.2.xの場合、「httpdという実行ファイルの中に直接埋め込まれている*.cを表示する」ものだ。なので、LoadModuleで動的にロードするモジュールの*.cは表示されない。変わりに
$ httpd -M
とすると、ロードされるモジュールが全て表示される。この時、右にstaticと書かれているものが、先ほどのhttpd -lで表示されたものと一致しているはずだ。LoadModuleで動的にロードされるモジュールはsharedと書かれているだろう。このsharedの中にuserdir_moduleがあれば、mod_userdirは正しく動的に組み込まれている事になる。

UserDir /home/*/public_html
というディレクティブが設定されている場合、そのOS中にmksaというユーザーが居たとして、OS自身から
http://127.0.0.1/~mksa/public_html ・・・(1)
にアクセスしてるなんて事はないよね?
http://127.0.0.1/~mksa/index.html
にアクセスすると/home/mksa/public_html/index.htmlを返すので、(1)だと/home/mksa/public_html/public_htmlを探しにいってNot Foundになる。ブラウザでURLを正しく打ってるのにダメとなるとhttpd.confがおかしい事になるのでもう一度確認されたし。

この回答への補足

ご回答ありがとうございます。今度は、
Forbidden
You don't have permission to access ~
というエラーが出てしまいました。

対象のディレクトリやファイルは
chmod 755
としているのでアクセス権はあるはずなのですが・・・。

補足日時:2010/03/28 03:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!