- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

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でも誤解ないようにしてください(; ´д`)

インストール Edit

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

ps ax | grep apache

)

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

sudo aptitude update
sudo aptitude install apache2

ラクデスナ

/etc/init.d/apache2 start

で、起動。
デフォルトの設定だと、こんな感じ

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

apache_default.png

設定 Edit

設定ファイルは、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に一括で全部置く手もありです。

ポートの設定変更 Edit

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

例えば、

Listen 8081

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

共通のディレクトリ設定 Edit

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

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

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

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

例えば、以下のようにする。

                Order allow,deny   
                allow from 123.456.789.0/24

この辺のアクセス権限の設定は、ミケネコの htaccess リファレンス が詳しいです。htaccess の解説になってますが、そのまま使えます。

セキュリティ絡みの設定 Edit

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

以下を記述

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

バージョン番号の削除等はこちらが参考になります。
HTTP レスポンスヘッダの Apache バージョンを非表示にする

ヘッダーを確認してみる Edit

sudo /etc/init.d/apache2 restart 

でapacheを再起動して、wget -Sをしてみて、ヘッダーの"Server" にapacheのバージョン番号などなければOK

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

メインのサイトの設定 Edit

www用のユーザーの設定 Edit

ここでは、/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 (ディレクトリ)

をやっておくことです。

設定 Edit

メインのサイトの設定をします。

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

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)は、以下のような感じで、

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

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

        # ↓ログは、/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

1
<!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>

apache_test_html.png

ユーザー別ディレクトリ設定 Edit

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

下記の例では、上の「ディレクトリの共通の設定」を使っているので、
ディレクトリ設定をコメントアウトしています。

<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を有効にする Edit

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

AddHandler cgi-script .cgi

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

1
2
3
4
5
6
#!/usr/bin/perl

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

apache_test_cgi.png

mod-writeを有効にする Edit

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

sudo a2enmod rewrite

あとはapacheの再起動でOK

トラブル関係 Edit

/etc/init.d/apache2 start時などに、

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 Edit

SSLについてはこちら

ログを置くディレクトリを変えた場合の設定 Edit

logrotateの設定変更 Edit

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

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

もし、VirtualHostごとにログを作っている場合は、
そのログディレクトリごとにスペース区切りで追加していけばよいと思います。

- /var/log/apache2/*.log {
+ /var/log/apache2/*.log /home/www/log/*.log {
          weekly
          missingok

logrotateのテスト Edit

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

ちなみに、実際にローテートされるのがいやな場合(設定ファイルの記述ミスのみチェックしたい)は logrotate に -d をつけてください。

$ 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 Edit


Show recent 10 comments. Go to the comment page.

  • /home/wwwをホームに持つwww-data ユーザーさんの設定を追記しました。 -- TOBY 2009-01-09 (Fri) 20:28:17
  • セキュリティの設定を少し(バージョン番号を返さない方法)などを書きました。後は細かい修正 -- TOBY 2009-01-10 (Sat) 17:07:03
  • で、起動。
    デフォルトの設定だと、こんな感じ
     
    また、インストールするだけで起動時に立ち上がるようになります。
    と書いてあるところの画像はWindowsのIEですよね。本当にUbuntuでapacheをインストールできたのですか疑問ですね? -- トゥルー? 2009-01-17 (Sat) 12:16:36
  • 最近忙しく少々カリカリしておりました。大人気ない返答をしてすいません。せっかくお越しいただいたのに。
    よろしければ、トゥルーさんの質問の意図を教えていただけないでしょうか? -- TOBY 2009-01-23 (Fri) 14:49:52
  • うーん、どうもわかりにくい -- 2009-05-18 (Mon) 19:17:12
  • 手元のパソコンで PHP のテストをするためにインストールを行ないました. Ubuntu 8.04 にて無事にインストールできました!ありがとうございます!! -- どせい? 2009-08-15 (Sat) 03:20:25
  • こんなややこしいことしないでもWEBMINのようにグラフィカルに設定できるツールはないのですか? -- noname? 2009-08-28 (Fri) 23:16:35
    • apacheのhttpd.confに限ったグラフィカルなツールは知りません。説明はこのページに書くと長いですが、記述自体は少ないです。
      あと、Ubuntu(debian?)と通常の素のapacheとで、記述の仕方が違う(例えば、Windows向けのXAMPPのapacheとか)全然違うので、その辺の都合もあるのかな、と。
      また、この際なので、テキストでの設定に慣れておいた方がよいと思います。他の設定もグラフィカルでないと設定できない、となると肝心な時や対応外の新しいソフトを入れるときに対処ができなくなります。
      (実際にwebminのようなツールを探しておられるということは、対応できなくなっておられるのでは?ないかなーと余計な心配してます) -- TOBY 2009-08-29 (Sat) 08:42:41
  • 文中のchownコマンドの後ろにある-rは何を表しているのでしょう?
    パーミッション?でしょうか?
    いずれにしてもこちらの環境ではエラーになりますので省略して進めてしまっていますが、よろしければ解説していただければと思います。 -- un? 2009-12-19 (Sat) 20:12:02
    • ごめんなさい、ミスです。省略してください。man chown してみるとわかりますが"-r"オプションはないですね。 -- TOBY 2009-12-20 (Sun) 12:44:43
Name:


Attach file: fileapache_test_cgi.png 389 download [Information] fileapache_test_html.png 346 download [Information] fileapache_default.png 553 download [Information]
Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-12-20 Sun 12:47:27 JST (51d)