お知らせ

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

#1 2010-09-13 16:42:14

butachokin
メンバ
登録日: 2010-03-01

apache2の基本的な設定

自分用に、serverを構築しようと思い、VirtualBox上にUbuntu10.04serverをインストールしました。
GUI操作ができるよう、desktopを追加インストールして、その後自分のIPアドレスにブラウザからアクセスしてみると、
/var/wwwのindex.htmlが表示されました。

ここで質問なのですが、このindex.htmlは編集できないのでしょうか?
パーミッションでロックされています。

いろいろと文献を検索しましたが、見つからなかったので以下もお願いします。
1.DocumentRootを変更したい場合は、どのファイルを変更すればよいのですか?
いろいろなファイルの中にDocumentRootの記述がありますが、これは統一するべきなのでしょうか。
2.また、/home/username/public_htmlを作成し、その中にindex.htmlを作成しましたが、http://localhost/~username/でアクセス出来ません。
3.CGIも使えるようにしたいのですが、どこを変更していいかわかりません。

以上の3つ、全て検索したところある程度は出ましたが、
なぜそこを編集するのか、それによってどうなるかがよくわからず、ややこしくなるのでやめました。
ですので、「そのファイルのその部分はこういう意味があるからこうする」のように理由含めて知りたいのです。


長くなりましたが、どなたかご教授願います。

オフライン

 

#2 2010-09-13 17:21:21

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

Re: apache2の基本的な設定

/var/wwwのindex.htmlが表示されました。

ここで質問なのですが、このindex.htmlは編集できないのでしょうか?
パーミッションでロックされています。

$ sudo gedit /var/www/index.html
とすれば編集出来ますよ。

1.DocumentRootを変更したい場合は、どのファイルを変更すればよいのですか?
いろいろなファイルの中にDocumentRootの記述がありますが、これは統一するべきなのでしょうか。

DocumentRoot を変更するには、/etc/apache2/sites-available/default を編集すれば良いのですが、これはデフォルトの雛形ファイルなので、出来れば直接編集せずに、コピーを取りそれを編集します。
$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/hoge
$ sudo a2dissite default
$ sudo gedit /etc/apache2/sites-available/hoge
として、ServerAdmin や DocumentRoot を変更、保存。
$ sudo a2ensite hoge
$ sudo service apache2 restart
といった感じです。

2.また、/home/username/public_htmlを作成し、その中にindex.htmlを作成しましたが、http://localhost/~username/でアクセス出来ません。

userdir を使用するには、LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so を有効にしなくてはいけません。
このためには、
$ sudo a2enmod userdir
$ sudo service apache2 restart
とします。

3.CGIも使えるようにしたいのですが、どこを変更していいかわかりません。

CGI は本来デフォルトで有効になっているはず(他の投稿でどうしても動かないというのがありましたが)なので、適切に設置してやれば、普通に動くはずです。
デフォルトの CGI ディレクトリは、/usr/lib/cgi-bin/ です。
Ubuntu ではこれ以外のディレクトリで CGI を動かすのは、セキュリティ上の理由であまりお勧めしていないようなのですが、例えばホームディレクトリ配下で動かしたければ下記のようにします。
ここでは仮に、/home/hoge/www/ を DocumenRoot にしていて、その下に cgi-bin ディレクトリを作り、その中で動かしたいとすると、

コード:

ScriptAlias /cgi-bin/ /home/hoge/www/cgi-bin/
    <Directory "/home/hoge/www/cgi-bin/">
        AllowOverride None
        Options +ExecCGI FollowSymLinks MultiViews
        Order allow,deny
        Allow from all
    </Directory>

のような内容を、<VirtualHost *:80></VirtualHost> 内に記述しておきます。
なお、言わずもがなかと思いますが、CGI の実行ファイルは、chmod 755 しておかないと動きません。

Ubuntu(Debian) の apache2 はその設定方法や設定ファイルが独自なものなので、最初相当面喰らうかと思いますが、慣れるとかなり使いやすくて面白いです。
もし、apache2 そのものの基本的な使い方を教えてほしいと言うことでしたら、何か1冊基本書をお読みになることをお勧めします。設定方法が独自なだけで、考え方などはデフォルトの apache2(apache.org) とまったく同じですので。

ちょっと急いで書いたので、間違ったことを書いていたらツッコミ希望。

オフライン

 

#3 2010-09-13 17:29:40

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

Re: apache2の基本的な設定

butachokinさん による投稿:

!) パーミッションでロックされています。
2) DocumentRootを変更したい場合は、どのファイルを変更すればよいのですか?
3) いろいろなファイルの中にDocumentRootの記述がありますが、これは統一するべきなのでしょうか。
4) また、/home/username/public_htmlを作成し、その中にindex.htmlを作成しましたが、http://localhost/~username/でアクセス出来ません。
5) CGIも使えるようにしたいのですが、どこを変更していいかわかりません。

1) 新規にindex.htmlを指定したDocumentRootに置けば良いです。
   /etc/apache2/site-available/defaultか/etc/apache2/site-enabled/000-defaultを編集していないなら、/var/www/以下に
   index.htmlを配置すればOKです。

2と4) http://localhost/~username/index.htmlとしてアクセスしたいなら/etc/apache2/site-enabled/000-defaultを編集します。

DocumentRoot /var/www
    <directory />
    Options FollowSymLinks
    AllowOverride None
    < /directory>

以下のように書き換える

    DocumentRoot /home/username/public_html
    <directory />
    Options FollowSymLinks
    AllowOverride None
    < /directory>
usernameは*(アスタリスク)でも可。異なるアカウントを作成したときに楽かも。

3) いろいろなファイルとは?あまりいじると分け分からなくなりますよ。

5の1)/etc/apache2/mods-enabled/mime.confの編集

164行目以降に
    AddHandler cgi-script .cgi .pl ((.plを書き加える))

としておくと、フリーで配布されている多くのCGIスクリプトも動きます。
rubyとかだったら、.rbだったかな?

5の2)  /etc/apache2/site-enabled/000-defaultの下の方に

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    </directory>

と書かれているように、cgiファイルを/usr/lig/cgi-binフォルダに置くとCGIファイルとして認識し、動作しますよという設定です。
これを/home/user/cgi-binにCGIファイルを配置したい場合は

ScriptAlias /cgi-bin/ /home/*/cgi-bin/

<Directory /home/httpd/cgi-bin>
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    </directory>

と編集します。これで、http://localhost/~user/cgi-bin/hoge.cgi(or hoge.pl)で動くはずです。
あとは設置するCGIファイルのパーミッションに気をつければOKです。

オフライン

 

#4 2010-09-13 17:42:38

butachokin
メンバ
登録日: 2010-03-01

Re: apache2の基本的な設定

>>petitbootangさん
いろいろとご教授くださり、ありがとうございました。
なんとかこうとか/home/name/domainにdocumentrootを設定でき、またその中のindex.htmlの表示にも成功しました。
また、

Ubuntu ではこれ以外のディレクトリで CGI を動かすのは、セキュリティ上の理由であまりお勧めしていないようなのですが、

というのは、非推奨であって、別にそれほど問題ないということですか?
それとも、セキュリティホールが発生する可能性が格段とあがる、ということですか?

セキュリティなどはしっかりとしたいので、ご教授よろしくお願いします。



>>zaganさん

usernameは*(アスタリスク)でも可。異なるアカウントを作成したときに楽かも。

というのを見て、/home/*/domainとdocumentrootを設定してみたのですが、404になってしまいました。
使い方がおかしいのでしょうか?
"sudo vi /etc/apache2/sites-available/domain"というコマンドで編集しました。

オフライン

 

#5 2010-09-13 18:19:12

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

Re: apache2の基本的な設定

butachokinさん による投稿:

usernameは*(アスタリスク)でも可。異なるアカウントを作成したときに楽かも。

というのを見て、/home/*/domainとdocumentrootを設定してみたのですが、404になってしまいました。
使い方がおかしいのでしょうか?
"sudo vi /etc/apache2/sites-available/domain"というコマンドで編集しました。

ユーザーディレクトリに"domain"フォルダがありますか?
なければ作成して、そのフォルダの中にコンテンツを入れちゃってください。

コード:

sudo vi /etc/apache2/sites-available/domain

というのは、domainという設定ファイルを/etc/sites-available配下に作りましたよという意味ですよね。
で、このdomainと言うファイルの内容は同じディレクトリにあるdefaultのコピーになりますか?

コード:

cat /etc/apache2/sites-available/domain

として表示される内容が、defaultの内容からbutachokinさんが編集した内容に変更されていることを確認してください。
そのうえで、

コード:

sudo a2dissite default  # 初期設定ファイルの無効化

sudo a2ensite domain # 新規設定ファイルの有効化

sudo apache2ctl cofigtest  # 設定ファイルの文法チェック

sudo /etc/init.d/apache2 restart  # 再起動
(or)
sudo service apache2 restart # 上記再起動で動作しない場合は、こちら

を実行して、Syntax ErorrとかNoteiceとか帰ってこなかったらOKです。
サーバーは、設定変更した時、必ず再起動させて変更を反映させるものだと思っておいたらよいかも。

オフライン

 

#6 2010-09-13 18:25:13

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

Re: apache2の基本的な設定

言わずもがなですが

ディレクトリ構成とファイルの配置についてのおまけ。

今回の設定では、たとえばindex.htmは
/home/user/domain/配下に

cgiファイルは
/home/user/domain/cgi-bin配下に
配置することになります。

オフライン

 

#7 2010-09-13 18:31:30

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

Re: apache2の基本的な設定

butachokin による投稿:

Ubuntu ではこれ以外のディレクトリで CGI を動かすのは、セキュリティ上の理由であまりお勧めしていないようなのですが、

というのは、非推奨であって、別にそれほど問題ないということですか?
それとも、セキュリティホールが発生する可能性が格段とあがる、ということですか?

それは秘密です・・・。

と言うのはウソですが、ごめんなさい、詳しい理由は私には分かりません。
セキュリティホールになることがあるので注意してください、と言うような説明しか見たことがなく、実際にどのようなことを想定しているお話なのかは、詳しい説明が見つからないんですよね、探し方が悪いのかも知れませんが。
思うに、自分以外の複数のユーザにホームページスペースを提供しているような場合、そのユーザディレクトリで万一、悪意のあるスクリプトを実行された場合(実行したユーザ自体に悪意があるとは限らない)、サーバを奪取されたりしかねないので、その辺の注意喚起をしているのではないかと思われますね。
その道で何年も飯を食っている専門家でもサーバを乗っ取られたりしているわけですから、サーバ管理者以外のユーザに CGI を実行させるのは、よほど注意しないと危険ですよ、ということだと思います。

オフライン

 

#8 2010-09-13 18:43:16

butachokin
メンバ
登録日: 2010-03-01

Re: apache2の基本的な設定

お返事ありがとうございます。

>>補足です
/etc/apache2/sites-available/配下にdomainというdefaultのコピー(編集済み)があります。
同じく、/home/nema/配下にdomainというディレクトリがあります。
domain配下にはindex.htmlがあります。


質問ばかりで申し訳ないのですが、
回答内容や文献を読んでると、疑問がでたので質問させていただいきます。
/etc/apache2/site-enabled/000-default
と、
/etc/apache2/sites-available/default
は何が違うのですか?
どちらを編集するかが文献によって様々で、困惑しています。


それと、CGIの設定も行ないましたが、perlは正常に動作するものの、Rubyが動きません。
踏んだ手順は以下のとおりです
1.sudo apt-get install libapache2-mod-ruby
2./etc/apache2/sites-available/domain の該当部を

ScriptAlias /cgi-bin/ /home/name/domain/cgi-bin/
    <Directory "/home/name/domain/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

に変更。
3./home/name/domain/cgi-bin配下にtest.cgi(perl),test2.cgi(ruby)を作成、ともに755にchmod。
test.cgiおよび2.cgiの中身は

print "Content-type: text/html\n\n";
print "Hello";

で、パス部は
perl: #!/usr/bin/perl
Ruby: #!/usr/bin/ruby
にしました。
4.http://localhost/cgi-bin/test.cgiにアクセス→Hello
5.http://localhost/cgi-bin/test2.cgiにアクセス→500 error
となります。

Rubyを別途、apt-get install rubyするべきなのでしょうか?
はたまた、単なる設定ミスなのでしょうか?

オフライン

 

#9 2010-09-13 18:47:26

butachokin
メンバ
登録日: 2010-03-01

Re: apache2の基本的な設定

>>petitbootangさん
入れ違い、というかよりもリロードしてなかったので書き込みが間に合いませんでした;

思うに、自分以外の複数のユーザにホームページスペースを提供しているような場合、そのユーザディレクトリで万一、悪意のあるスクリプトを実行された場合 (実行したユーザ自体に悪意があるとは限らない)、サーバを奪取されたりしかねないので、その辺の注意喚起をしているのではないかと思われますね。

たしかに、納得しました。
ただ今回は、自分で使用、もしかしたら友人に貸して上げる程度の予定なので、それほど気にかけないことにします。
ただしその友人が裏切ったら・・・
なんて暗いことはなしの方向で(笑

オフライン

 

#10 2010-09-13 18:49:05

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

Re: apache2の基本的な設定

$ dpkg -l | grep ruby
としてみて、何も表示されずにプロンプトに戻ってしまう場合、ruby がインストールされてませんので、
$ sudo apt-get install ruby

オフライン

 

#11 2010-09-13 18:55:12

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

Re: apache2の基本的な設定

>ただしその友人が裏切ったら・・・
>

と言うか、その友人がどこからか極悪なスクリプトを拾ってくるかも知れませんので、その辺は充分気をつけていた方が良いということですね、お友達はもちろん悪人ではないと思いますので。

オフライン

 

#12 2010-09-13 19:03:31

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

Re: apache2の基本的な設定

butachokinさん による投稿:

回答内容や文献を読んでると、疑問がでたので質問させていただいきます。
/etc/apache2/site-enabled/000-default
と、
/etc/apache2/sites-available/default
は何が違うのですか?

sites-available配下にあるファイルをa2ensiteコマンドで有効化すると、sites-enabledにリンクが貼られ、そこで初めて公開が有効となります。
sites-available配下のファイルを編集した場合、即座にsites-enabled配下の有効化されたファイルに反映します。
sites-enabled配下のファイルを直接編集してもかまいません。
※編集したら、apache2の再起動を忘れずに。

butachokinさん による投稿:

それと、CGIの設定も行ないましたが、perlは正常に動作するものの、Rubyが動きません。
踏んだ手順は以下のとおりです
1.sudo apt-get install libapache2-mod-ruby
2./etc/apache2/sites-available/domain の該当部を
<!----snip--->
に変更。

/etc/apache2/mods-enabled/mime.confで

164行目以降に
    AddHandler cgi-script .cgi .pl .rb

などと、rubyファイルの拡張子を加えてますか?

butachokinさん による投稿:

3./home/name/domain/cgi-bin配下にtest.cgi(perl),test2.cgi(ruby)を作成、ともに755にchmod。
test.cgiおよび2.cgiの中身は
<!---snip--->
Rubyを別途、apt-get install rubyするべきなのでしょうか?
はたまた、単なる設定ミスなのでしょうか?

rubyは動かしたことないのですが、libapache-ruby1.8はインストールされてますか?

オフライン

 

#13 2010-09-13 20:45:51

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

Re: apache2の基本的な設定

あ。ごめんなさい。
sudo apt-get install libapache2-mod-ruby やってたんでしたね。

これまで書いた設定に

コード:

sudo apt-get install ruby

で動作しました。

サンプルはrbsearchを使用させていただきました。

インストール前は、Internal Server Errorでした。

オフライン

 

#14 2010-09-13 20:54:14

butachokin
メンバ
登録日: 2010-03-01

Re: apache2の基本的な設定

$ dpkg -l | grep rubyした結果、

ii  libapache-ruby1.8                    1.2.6-2                                         Ruby libraries for mod_ruby
ii  libapache2-mod-ruby                  1.2.6-2                                         Embedding Ruby in the Apache2 web server
ii  libruby1.8                           1.8.7.249-2                                     Libraries necessary to run Ruby 1.8

と表示されました。

/etc/apache2/mods-enabled/mime.confの165行目を、

AddHandler cgi-script .cgi .pl .rb

としました。

そして、errorログ(/var/log/apache2/error.log)を参照してみると、

[Mon Sep 13 20:49:44 2010] [error] [client 192.168.11.12] Premature end of script headers: test2.cgi

と表示されました。



その友人がどこからか極悪なスクリプトを拾ってくるかも知れませんので、

そうですね、気をつけたいと思います。

オフライン

 

#15 2010-09-13 20:58:18

butachokin
メンバ
登録日: 2010-03-01

Re: apache2の基本的な設定

>>zaganさん

おおおおっ
動きました、ありがとうございます!
mod等をインストールしていても、コアとなるRubyがなかったのでerrorだった、ということでしょうか?

いずれにせよ、動いてよかったです。
明日までの課題も、いまからできそうです笑

オフライン

 

Board footer

Powered by FluxBB