だいぶ長いタイトルですね。笑
タイトルの通りそのままの記事です。
結構苦戦したので、数ヶ月後の自分のために丁寧にまとめて残しておきます。
実は、1ヶ月前にも一度この手順を踏んでいて、今回は CentOS の再インストールのため2度目の挑戦だったのですが・・・やっぱり苦戦しました。笑
まず、「そもそも、なぜ公開用の html ファイルをユーザーディレクトリ下に置きたいのか」という点に触れておきます。
Apache をインストールしたときには、/var/www/html が公開ファイルのデフォルトの配置先になるのですね。
で、これは非常に気持ちが悪い。
だって、ユーザーが自分用の情報を置きたいだけなのに、わざわざほかのユーザーも見える共用のディレクトリ (/var/www/html) に置かないといけないのです。
しかも、/var/www/html に置くためには管理者権限が必要です。
そこで、ユーザー毎のホームディレクトリの下に、ユーザー自身が管理者権限なしに自由に配置できるような公開ディレクトリを作れたらいいなと思うわけです。
今回はユーザーを hoge として、/home/hoge 内に public_html を作成し、その中に自由に html を配置して、ブラウザからアクセスできることを目指します。
基礎知識
$ sudo yum install httpd
Apacheの起動
$ sudo /etc/init.d/httpd start
Apache の再起動
$ sudo /etc/init.d/httpd restart
Apache の停止
$ sudo /etc/init.d/httpd restart
http://localhost でApacheの画面が出てくれば成功です。
この時点で /var/www/html 以下に管理者権限で html ファイルをおけば、任意のページをブラウザで表示させることができます。
また、デバッグ用に以下のコマンドを覚えておくといいでしょう。
アクセスログの確認
# tail -f /var/log/httpd/access_log
エラーログの確認
# tail -f /var/log/httpd/error_log
参考:
CentOS apache アクセスログ デフォルトディレクトリ - R-KのはてなD
apacheのログの確認(CentOS) : Android PHP デザインまとめ
ユーザーディレクトリの公開
まず、あなたのユーザー名を hoge と仮定します。
ブラウザから、
へアクセスすると、
/home/hoge/public_html/index.html
が呼ばれるように設定しましょう。
まず、/home/hoge/ すなわち ~/ に public_html と index.html を配置します。
$ cd ~ $ mkdir public_html $ cd public_html $ echo 'Otsukare sama desu.' > index.html
これで、http://localhost/~hoge/ にアクセスしてみても正しく表示されませんね。次のエラーページが表示されることでしょう。
Not Found
The requested URL /~hoge/ was not found on this server.
原因はあなたがアクセスしたディレクトリに対する Apache の許可がないからです。
そこで、Apacheの設定ファイルである httpd.conf を変更して、public_html 以下のファイルを公開出来るようにしましょう。
$ sudo /etc/httpd/conf/httpd.conf
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir disabled # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disable" line above, and uncomment # the following line instead: # #UserDir public_html </IfModule>
これはテキスト形式の設定ファイルなので、vim を使って編集していきましょう。
この記述を・・・
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # UserDir disabled UserDir enabled hoge # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disable" line above, and uncomment # the following line instead: # UserDir public_html </IfModule>
このようにできれば完成です。
ユーザー hoge の UserDir を許可して、公開ディレクトリの名称を public_html と設定しています。
httpd.conf を操作したら、必ず Apache を再起動させます。
Apache の再起動
$ sudo /etc/init.d/httpd restart
httpd.conf の構文が間違っていれば、再起動に失敗するはずです。
さて、この状態で、http://localhost/~hoge/ にアクセスしてみましょう。
Forbidden
You don't have permission to access /~hoge/ on this server.
のようなエラーが出たと思います。
こんなときこそ、エラーログです。
[Xxx XXX XX XX:XX:XX 20XX] [error] [client ::1] (13)Permission denied: access to /~hoge/index.html denied
わかりにくいですが、Permission denied です。
これは、ファイルやフォルダのパーミッションが間違っているということです。
パーミッションの設定
chmod 701 /home/hoge chmod 701 /home/hoge/public_html
この2つはアクセスしたい index.html に到達するためのディレクトリですね。
ややこしいのですが、権限は 701 です。 700 ではダメです。
参考:
apache を利用しての public_html が公開できない - 解 - いろきゅう.jp 〜Programmable maiden〜 Tech side
権限関係でもう1つ。
CentOS には SELinux というセキュリティがかかっています。
デフォルトの設定では、これのせいでブラウザからユーザーディレクトリにアクセスできません。
ここでは、SELinux を切ってしまいましょう。
SELinuxの設定
$ sudo getenforce
Enforcing
$ sudo setenforce 0
$ sudo getenforce
Permissive
このままだと、一時的に切れただけなので、再起動すると元に戻ってしまいます。
起動時に自動で設定されるようにするためには、次のようにファイルの編集が必要です。
$ sudo vim /etc/sysconfig/selinux
デフォルトでこんな風になっているはずです。
SELINUX=enforcing
これをこうしておきましょう。
#SELINUX=enforcing SELINUX=disabled
参考:
[CentOS][Apache]ユーザ毎のディレクトリを公開する | ごった煮 - tips about programming and building a server
[CentOS]SELinuxを無効にするには | ごった煮 - tips about programming and building a server
ただ、このやり方はあまりスマートなやり方ではないようですね。
まあ、セキュリティを自らぶち壊しているわけですから。
もう少しスマートにやりたい方は、次を読んでください。
参考:
ユーザーディレクトリを公開するときの SELinux の設定
[CentOS][Apache]SELinux有効下でのユーザ毎のディレクトリを公開する | ごった煮 - tips about programming and building a server
さぁ、アクセスしたまえ!
これで表示されるはず!
次のようなページが表示されればオーケーです。
Otsukare sama desu.
お疲れ様です。
今後の方向性
どうでしたか。ユーザーディレクトリのページを公開するだけで、非常に面倒な作業でしたね。
さて、今回 HTML が表示できたわけですが、次にやりたくなるのは CGI ですね。
やはり静的なページよりも、動的なページを作りたいものです。
しかし、残念ながらここには suEXEC という非常に面倒な話が入ってきてしまいます。
そういえば、外部のPCから下記のようにIPアドレスを打ち込んで表示するのも、残念ながら今の段階ではできません。
CentOS のファイアウォールの設定が必要なのですね。気になる方は 「iptables」 で検索してみてください。
というわけで、これから先も長くなりそうなので、今回はここら辺で切り上げて、次回以降の内容に期待しましょう。
それでは。