#contents

*はじめに [#fe26fe23]
apache2のインストールについて

大体、ここに書いてある通りです。
わからない時は、ここを参考にしてください。
HTTPD - Apache2 Web Server
http://doc.ubuntu.com/ubuntu/serverguide/C/httpd.html

[[Ubuntu]]のページにも書いたのですが、server版で作業してます。
Desktop版でもある程度一緒のはずですが、違うところは読み替えてください。(とはいえ、Portable Ubuntu 9.04(coLinux)でも一応は確認しました)

webサイトの確認は、Windowsから行っているのでスクリーンショットがWindowsでも誤解ないようにしてください(; ´д`)

*インストール [#ia300844]

''インストール時のSoftware selection に LAMPをセレクトしておくと、インストールされているはずです、また起動時に自動で立ち上がっているはずです。''
(以下のコマンドで確認可です。/usr/sbin/apache2 -k start ってのがたくさんあれば、すでにインストールされ起動しています。
 ps ax | grep apache
)

インストールしていない場合は以下でインストールする。

#pre{{
sudo aptitude update
sudo aptitude install apache2
}}

ラクデスナ

 /etc/init.d/apache2 start
で、起動。
デフォルトの設定だと、こんな感じ

また、インストールするだけで起動時に立ち上がるようになります。

&ref(apache_default.png);
*設定 [#b1613e2f]

設定ファイルは、debianの構成をうけついでいて、
httpd.confを直接弄るようなことはありません。

以下、/etc/apache2/ 内の簡単な説明
 apache2.conf ←httpd.confの代わりにこれが読まれる。
 ports.conf ←ポート設定
 sites-available/ ←仮想ホストの設定はここにファイルを作る
 mods-available/ ←モジュールの設定はここにファイルを作る
 conf.d/ ←細かい設定はここにファイルを作る

設定を書き直したら、
 /etc/init.d/apache2 force-reload
で設定を読みなおす。

以下で、いろいろやってみてます。

注意点としては、
''apache2.conf自体はほとんど編集しません''。

細かい設定は、conf.dに一個一個、個別にファイルを置いて設定するのがナウイです。
httpd.confもapache2.confから、読まれるので、httpd.confに一括で全部置く手もありです。

**ポートの設定変更 [#rda9908e]

例えば、ローカルネットワーク用やサブネットワーク用のwebサイトで、
ポート80をそのまま使いたくない、なんて場合は、/etc/apache2/ports.conf を弄ります。

例えば、
 Listen 8081
などとすると、http://(アドレス):8081/ でアクセスできるようになります。

**共通のディレクトリ設定 [#z677a5df]

/etc/apache2/conf.d/directory_settings
などというファイルを作って、共通のディレクトリ設定を置いておきます。

こうしておくと、仮想ホストや、ユーザー別の設定などで、あたかもデフォルトの設定のように共通で使われます。(httpd.confで書いてたころはこっちがデフォだろうけど)

#pre{{
<directory />
        Options All        # ←CGIとか使えるように
        Options -Indexes   # ←ディレクトリ一覧表示だけはしないように
        AllowOverride All  # ←.htaccessで設定上書きできるように
        Order allow,deny   
        allow from all     # ←全ホストからアクセス許可
        # CGIとか使えるように
        Options All
        # ディレクトリ一覧表示だけはしないように
        Options -Indexes
        # .htaccessで設定上書きできるように
        AllowOverride All
        Order allow,deny

        # 全ホストからアクセス許可
        allow from all
</directory>
}}

サブネット内だけにアクセスを許可するときは、
allow from all の all をサブネットワークアドレスに変更する。

例えば、以下のようにする。
#pre{{
                Order allow,deny   
                allow from 123.456.789.0/24
}}

この辺のアクセス権限の設定は、[[ミケネコの htaccess リファレンス:http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/access.html]] が詳しいです。htaccess の解説になってますが、そのまま使えます。

**セキュリティ絡みの設定 [#cd679eec]

/etc/apache2/conf.d/security などというファイルを作って

以下を記述
#pre{{
ServerTokens ProductOnly  # Serverヘッダのバージョン番号表記等をなしに
ServerSignature Off # サーバーが生成するページでバージョン番号等をなしに
# Serverヘッダのバージョン番号表記等をなしに
ServerTokens ProductOnly
# サーバーが生成するページでバージョン番号等をなしに
ServerSignature Off
}}

バージョン番号の削除等はこちらが参考になります。
[[HTTP レスポンスヘッダの Apache バージョンを非表示にする:http://sonic64.com/2006-02-09.html]]

***ヘッダーを確認してみる [#h1685a05]
 sudo /etc/init.d/apache2 restart 
でapacheを再起動して、wget -Sをしてみて、ヘッダーの"Server" にapacheのバージョン番号などなければOK

 wget -S http://(ホストのIPかアドレス)

** メインのサイトの設定[#k2a8ba3c]

***www用のユーザーの設定 [#o21f88b8]

ここでは、/home/wwwにホームを持つ www用のユーザーさんがいることが前提になっています。

''デフォルトの/var/wwwでよいと思う人は飛ばしてください&読み替えてください。/home/wwwにおいているのは、/homeだけ別HDDにしていて取り回しをよくしている、という(うちの)運用のためと、昔からの(うちの)慣例のためです。慣例や運用に納得できないとか、ポリシーに合わない場合はご自分の環境に読み替えていただくとよいかと。''

apacheを追加したときに追加されている(たぶん)、ユーザー"www-data" をそのまま使うことにします。

後はhtmlなどを置く /home/www/www と
ログを置く /home/www/log (←デフォルトの/var/logのままでいい人はいらないです)
も作っておきます。

 cd /home/
 sudo mkdir www
 sudo mkdir www/www
 sudo mkdir www/log
 sudo chown -R www-data:www-data www

後は、vipwでユーザーwww-dataのホームを変更します

 sudo vipw

以下のように変更(/var/www→/home/www にするだけ)

 - www-data:x:33:33:www-data:/var/www:/bin/sh
 + www-data:x:33:33:www-data:/home/www:/bin/sh

後は任意で、scpやsftpなどでユーザーwww-dataでファイルをアップロードできるように、
.ssh/authorized_keys を記述するなど、
したい人はやってみてください。
やる場合は [[../ssh(sshd)の設定]] を参考のこと。

※ユーザーwww-dataにはデフォルトでは、パスワードが設定されていませんが、
 sudo su www-data
とすればwww-dataになれますので、
.sshを作ったり .ssh/authorized_keys  を生成したりする場合はこれを試してみてください。
(sudo で全部作業すると権限内ディレクトリで補完が効かないなど、けっこう面倒)

注意としては sudoで.sshディレクトリなど作った場合は、最後に
 sudo chown -R www-data:www-data (ディレクトリ)
をやっておくことです。
***設定 [#p9079c6f]
メインのサイトの設定をします。

例えば、こんな感じです。
以下の例では、defaultの設定をコピーして弄っています。

#pre{{
cd /etc/apache2/sites-available/
sudo cp default my_site
sudo vi my_site
:(設定後)
sudo a2dissite default  ←defaultの設定を無効に
sudo a2ensite my_site   ←my_siteの設定を有効に
}}

設定例(/etc/apache2/sites-available/my_site)は、以下のような感じで、

上の「共通のディレクトリ設定」をやっていれば、
ディレクトリの設定は下記のように、書かなくてよいです。

#pre{{
NameVirtualHost *
<VirtualHost *>
        ServerAdmin mail@localhost    # ←管理者のメールアドレス
       
        DocumentRoot /home/www/www    # ←HTMLとか、置く場所
        # 管理者のメールアドレス
        ServerAdmin mail@localhost
        # HTMLとか、置く場所
        DocumentRoot /home/www/www

        # ↓ログは、/var/logに保存しないようにしている
        ErrorLog /home/www/log/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        customlog /home/www/log/access.log combined
</VirtualHost>
}}


適当なHTMLを置いてみる例: index.html
#geshi(html){{
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=shift_jis">
    <title>TESTページ</title>
  </head>
  <body style="background: #d6dee0">
    <h1>Hello, World!!</h1>
    Hello, hello, my world!
  </body>
</html>
}}

&ref(apache_test_html.png);
**ユーザー別ディレクトリ設定 [#j88a7aa5]

/etc/apache2/mods-available/userdir.conf
を編集します。

下記の例では、上の「ディレクトリの共通の設定」を使っているので、
ディレクトリ設定をコメントアウトしています。
#pre{{
<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <directory /home/*/public_html>
                #allowoverride fileinfo authconfig limit
                #options multiviews indexes symlinksifownermatch includesnoexec
        </directory>
</IfModule>
}}
などとします。

**CGIを有効にする [#acf93006]

sudo vi /etc/apache2/conf.d/enable_cgi などとして、
中に以下を記述する。
(apache2.confの中身はできるだけ編集しない方向で)

 AddHandler cgi-script .cgi

後はapache再起動。
以下は、perlのCGIを動かしてみた例:test.cgi
※実行権限はつけないとInternal Server Errorになりますので注意

#geshi(perl){{
#!/usr/bin/perl

$ENV{'TZ'} = "JST-9";
print "Content-type: text/plain\n\n";
print "Hello, CGI!\n";
print `date`;
}}

&ref(apache_test_cgi.png);

**mod-writeを有効にする [#afac6a1c]

URLの書き換えエンジンであるmod-writeを設定する方法。

 sudo a2enmod rewrite

あとはapacheの再起動でOK
*トラブル関係 [#ja8035aa]
/etc/init.d/apache2 start時などに、
#pre{{
Starting apache 2.0 web server...                                                       
  apache2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
}}
などと言われる時。127.0.0.1が代わりに、グローバルアドレスの場合もある。

結論としては、''自ホストのIPのDNSの逆引き設定ができていないため''。

以下、解決法。

ようは、DNSの逆引き設定をしてやるのだが、やり方は、二通りある。

-DNSサーバーで逆引き設定をする。
-/etc/hostsに 設定を書く
レンタルサーバーのDNSサーバーなどでできない場合は、こちら。

DNSサーバーの設定はまかせるとして、
/etc/hosts の書き方。

 123.456.789.012   moge.moge-hoge.com moge

という風に追加してやる。すでに123.456.789.012の項があったら書き換える。

*SSL [#tb000292]
SSLについてはこちら
-[[./SSL]]

*ログを置くディレクトリを変えた場合の設定 [#z7545198]
**logrotateの設定変更 [#e46b902b]
ログを置くディレクトリを変更した場合は、
/etc/logrotate.d/apache2 も以下のように変更する。
''これをやっておかないとログが1個のファイルに増え続けますので注意。''

下記は 新しいログ置き場が、/home/www/log/ にもある場合。

もし、VirtualHostごとにログを作っている場合は、
そのログディレクトリごとにスペース区切りで追加していけばよいと思います。
#pre{{
- /var/log/apache2/*.log {
+ /var/log/apache2/*.log /home/www/log/*.log {
          weekly
          missingok
}}

**logrotateのテスト [#a33d8601]
logrotateはcronにより1日1回自動で動きますが、
すでにログがたまっているなどして手動でlogrotateを動かしたい場合は以下のようにします。

ちなみに、実際にローテートされるのがいやな場合(設定ファイルの記述ミスのみチェックしたい)は logrotate に -d をつけてください。
#pre{{
$ sudo logrotate -v /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for /var/log/apache2/*.log /home/www/log/*.log 

Handling 1 logs

rotating pattern: /var/log/apache2/*.log /home/www/log/*.log  weekly (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
  log does not need rotating
considering log /var/log/apache2/error.log
  log does not need rotating
considering log /home/www/log/access.log
  log does not need rotating
considering log /home/www/log/error.log
  log does not need rotating
not running shared postrotate script, since no logs were rotated
}}

うまくいきました?
*参考URL [#i3a86bfd]
-HTTPD - Apache2 Web Server
http://doc.ubuntu.com/ubuntu/serverguide/C/httpd.html
-Debian初心者のA2Z -7-
http://www.h7.dion.ne.jp/~maruyosi/pasocom/debian_trial_7.html
-[[【初心者専用】 Ubuntu Linux 6 【馬耳東風】:http://72.14.235.104/search?q=cache:iT_q-S__I9UJ:pc11.2ch.net/test/read.cgi/linux/1174794670/348-448+ubuntu+apache2.conf+a2ensite&hl=ja&ct=clnk&cd=4&lr=lang_ja]]
-http://alk.dip.jp/apache2-default/sv080.html
-[て] 玄箱でApache2その後: 大阪てきとー日記
http://kazz7.air-nifty.com/tekito/2005/01/apache2_1.html
-[[ミケネコの htaccess リファレンス:http://mikeneko.creator.club.ne.jp/~lab/web/htaccess/access.html]]
htaccessに書くホスト/IP 制限の方法の解説ですが、そのまま設定ファイルに生かせます。

----
#pcomment(,reply)

TIME:"2010-06-10 (Thu) 13:03:22" REFERER:"http://tobysoft.net/wiki/index.php?cmd=edit&amp;page=Ubuntu%2Fapache2" USER_AGENT:"Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)"
Front page   Edit Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes