images header
Index >> Plamo Linux Fan >> Apacheメモ
                Apacheメモ
2003/07/29
1.目的

 Apache(アパッチ)は、NCSA httpd を基に作成されたフリーのWEBサーバで、現在ではほぼインターネットスタンダードに近いものです。イントラネットのホームページ作成はもちろん、インターネットへの情報発信にも利用可能です。

 Apacheは、Plamo では Contrib ディレクトリにパッケージとして同梱され配布されていますが、これは PostgreSQL や PHP モジュールを組み込んだ形での配布です。これらがないまっさらな Apache がほしい方は、配布されている Apache のソースから構築する必要があります。

2.入手先

apache_1.3.28.tar.gz
http://www.apache.or.jp/
※ま、どこにでもありますが・・・

3.導入方法

  1. パッケージでお気楽インストール
     Plamo についていくパッケージがいい方は、

    # installpkg /cdrom/contrib/Database/*.tgz
    # installpkg /cdrom/contrib/WWW/*.tgz
    # installpkg /cdrom/contrib/Database/Perl5/*.tgz
    # installpkg /cdrom/contrib/Database/Sample/*.tgz

    します。起動スクリプトも確か設定されると思いましたので、一番お気楽です(笑)
     また、PostgreSQL + PHP + Apache と組み合わせた、Plamo用の最新パッケージを、Jun Kuwamura さんが公開してくださっています。http://www.linet.gr.jp/~juk/plamo/ から辿ってください。
     いずれもDSO用になっているので、大抵コレで間に合うでしょう。
     なお、「PostgreSQLなんか要らない」という方は、/etc/rc.d/rc.local 中の pgsqld をロードする部分をコメントアウトすれば、次回起動以降はPostgreSQLは起動しません。

    # vi /etc/rc.d/rc.local
    # cat /etc/rc.d/rc.local
    ...
    #if [ -x /usr/local/pgsql/bin/pgsqld ]; then
    #  echo -n "Starting postgres server "
    #  /usr/local/pgsql/bin/pgsqld start
    #  echo "."
    #fi

     それではいやだ、自分でコンパイルして使いたいという方は、これ以降のコンパイルの仕方をお読みください。環境設定の仕方に関しては、基本的に同じです。ここでは、パッケージで提供されているのと同様、DSOサポート付きでビルドしてみます。

  2. 入手したアーカイブを/usr/local/srcへ置き、展開する

    # cd /usr/local/src
    # tar xvfz apache_1.3.28.tar.gz

  3. 環境設定とメークを行う

    # cd apache_1.3.28
    # env OPTIM=-O2 ./configure --enable-shared=max --server-gid=apache --with-port=80
    # make
    # make install

    これで、/usr/local/apacheにインストールされるはずです。なお、ポート番号を指定するのは、rootでないユーザ権限でコンパイルしたとき自動的にhttpd.confにport 8080と記述されるので、それの回避のためです。

  4. 動作環境の設定を行う
     昔、1.2.xまでのApacheでは、httpd.conf/access.conf/srm.confの3つの設定ファイルが必要だったのですが、1.3.xではhttpd.confに集約されています。
    ※どうも厳密には、1.3.4かららしいです
     httpd.conf内の詳しい説明は、参考文献や他の先達の皆様のページ等を参照してください。私が書くよりはずっとわかりやすいと思います :-p
     最近は、Apache ドキュメント翻訳プロジェクト(http://cvs.apache.or.jp/docs-project/)の皆様が本家Apache.orgに Apache 日本語マニュアルを提供くださっています。このような素晴らしいマニュアルをご用意くださっている皆さんに感謝しますm(_ _)m

     以下、私がインストール後に直したhttpd.conf内のディレクティブに限定して、記述します。

    • DocumentRoot "/home/que/htdocs/"
      デフォルトでは、/usr/local/apache/htdocs/になっていますが、僕んちでは、ユーザで入ってページをいじりたいのと、マルチユーザで使いたいので、/home/que/htdocs/ あたりにしています。

    • <Directory "/home/que/htdocs">
      上の設定を変更したため、デフォルトでは "/usr/local/apache/htdocs" となっているこのディレクティブを変更する必要が発生します。忘れると動きませんので、お気をつけて。

    • ScriptAlias /cgi-bin/ "/home/que/cgi-bin/"
      ドキュメントルートを僕のホームディレクトリへ移動したということは、当然 cgi-bin も移動します。便利ですもの(^-^)

    • <Directory "/home/que/cgi-bin">
      これも上で変更をしたために発生する変更です。

    • ErrorDocument 404 /missing.html
      この行、デフォルトではコメントアウトされていますが、アンコメントしておくと、エラー404(リンクが切れているとき)に出すページを自分で作れます。僕んちのは、こんな感じです。

    • DirectoryIndex index.html index.htm
      デフォルトでは、index.htmlのみとなっているでしょうが、Windowsなユーザの作るファイル名がまれに拡張子.htmであることがあるので、index.htmを追加してます。また、トップページをcgiで作りたい場面(e.g.データベースを使う等)などで便利なように、index.cgiなどを追加するのもいいでしょうし、トップページでssiを使う時のためにindex.shtmlを追加するのもいいでしょう。PHP 使うなら、index.phtml/index.php3/index.php なんかも追加したほうがいいですね。おうちのマシンなら、プロバイダと違って何でもありです(^-^)b

    • AddType application/x-ns-proxy-autoconfig pac
      僕んちは、Squid を併用して http/ftp をキャッシュしているので、Netscape Navigator のプロキシ設定を自動的にSquidへ向けるために、Netscape Scriptを使っているのですが、そのための拡張子を設定しています。これの件は、Squid のところで書きます。

  5. 自動起動を設定する

     Apache 1.3.xからは、起動用のスクリプトがついてくるので、これを使うのが便利でしょう。/usr/local/apache/bin/apachectl というものです。これを /etc/rc.d/rc.local に設定するのがいいとおもいます。/etc/rc.d/rc.local に以下の文を追記します。

    if [ -x /usr/local/apache/bin/apachectl ]; then
     /usr/local/apache/bin/apachectl start
    fi

     なお、このスクリプトを使って、ApacheにSIGHUPを送ることなどもできますから、1.2.x時代に比べるとお気楽になったものです :-)

  6. 起動してみる

     ここまできたら、ためしに起動してみましょう。

    # /usr/local/apache/bin/apachectl start

     これで何も言われなければ、動いているはずです。例によって、動いているかを確かめるには、ひとまず下記のようにします。

    # ps ax | grep httpd

     /usr/local/apache/bin/httpd が 5行出てくれば、オッケーです。とにかく動いています。でも、ちゃんと接続できるかどうか、わかりませんね?
     もっともシンプルな確認方法は、telnet でポート80を叩いてみることです。以下の手順でやってみましょう。

    # telnet localhost 80
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    GET / HTTP/ 1.0 <-- この部分を入力して Enter を2回叩く
    
    HTTP/1.1 200 OK
    Date: Fri, 17 Dec 1999 22:19:28 GMT
    Server: Apache/1.3.9 (Unix)
    Last-Modified: Wed, 20 May 1998 14:59:42 GMT
    ETag: "xxxxx-xxx-xxxxxxxx"
    Accept-Ranges: bytes
    Content-Length: 1622
    Connection: close
    Content-Type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
    <HTML>
    <HEAD>
    <TITLE>Test Page for Apache Installation on Web Site</TITLE>
    ....
    Connection closed by foreign host.

     ってな具合になれば、ブラウザでもきっと開けます。

  7. ブラウザで開いてみる

     私は普段、Plamo Linux 上では Lynx というテキストベースのブラウザを使っているので、もっとお手軽にテストします。まあ、どうせ Windows があるんだから、Netscape でつなげば良さげなものですが、Windows を使って localhost からの接続は実現できませんのでね。まぁ、お好きなものでどうぞ。

# lynx localhost

Lynx画面

4.運用のヒント

  1. 複数ユーザで1つのサイトを構成する
     別にどうって事はないのですが、複数の人にコンテンツを作らせて、それを1つのWEBサーバでまかなおうとすれば、当然それらの人はこのサーバにアカウントを持ってログインできなくてはなりませんね。で、世間のプロバイダさんなんかは、FTP でログインすると、自分の与えられた領域内しか見えません(これを『仮想ルート』といいます)が、LinuxBox にユーザを追加しただけの状態だと、ユーザが FTP ログインしたときに本物のルート(/)から全部の階層が見えます。別に権利が与えられていなければ見え様が見えまいがかまわないわけですが、「ログイン時のカレントディレクトリに index.html を置けばいいんだよ(^-^)b」という説明をユーザにしたいが為に、世間のプロバイダさんと同じようにしたい場合があります。そのようなときは、そのユーザを「ゲストユーザ」にしてあげます。
     そのための設定は、下記の通りです。

     なお、これはwu-ftpdの場合で、proftpdを使う場合はもっとシンプルです。ProFTPDメモを御覧ください。

    1. /etc/ftpaccessの設定を確認

      # cat /etc/ftpaccess | grep guestgroup
      guestgroup ftponly

      こうなっていれば、ftponly グループに所属しているユーザは、wu-ftpd には「ゲスト」として認識されます。

    2. ftponlyグループの作成

      # groupadd ftponly
      # cat /etc/group | grep ftponly
      ftponly:x:102:

    3. 仮想ルートを設定したいユーザを/etc/groupへ追記
      ここでは、hpuser1 および hpuser2 というユーザを設定したいとします。

      # jvim /etc/group
      # cat /etc/group | grep ftponly
      ftponly:x:102:hpuser1,hpuser2

    4. /etc/passwdを修正
      ルートに設定するディレクトリ位置と、接続したときに開かれるディレクトリ位置を/etc/passwd ファイルに設定します。

      # jvim /etc/passwd
      # cat /etc/passwd | grep hpuser1
      hpuser1:x:10004:100:,,,:/home/hpuser1/./htdocs/:/bin/tcsh

      下線部分を追記します。

    5. 指定のディレクトリを作成してあげます

      # mkdir /home/hpuser1/htdocs
      # chown hpuser1:users /home/hpuser1/htdocs

      この chown を忘れると、ユーザが何も書けなくなっちゃいますので、気をつけてください(^^;

    6. lsその他必要なものをコピーしてあげる

      # cp /home/ftp/bin /home/hpuser1 -R
      # cp /home/ftp/usr /home/hpuser1 -R
      # cp /home/ftp/lib /home/hpuser1 -R
      # cp /home/ftp/etc /home/hpuser1 -R

      ユーザにとっては、/home/hpuser1 がルートディレクトリなので、AnonymousFTP用のディレクトリと同様に、これらのファイルやディレクトリを置いてあげる必要がある。これをしないと、FTP でつないだときにファイルリストすら見えない。

     これで、hpuser1 または hpuser2 で接続してみましょう。きっとカレントディレクトリが /htdocs になることでしょう。また、それ以上の階層へは cd できなくなっているでしょう。

  2. ユーザ毎のディレクトリを~(チルダ)でなくディレクトリ階層にする
     別に ~ でいい方には関係無い話ですから読み飛ばしてください。
     ディレクトリ階層に見せるには、どうやら二つの方法があるらしいです。ひとつは、ドキュメントルートにリンクを作成して、FollowSymLinkをEnableにする方法、もうひとつは、httpd.conf 内で新たな Alias を作成する方法です。どっちがより正統な方法か(あるいはどっちも邪道か(笑)僕にはわかりませんが、僕んちは簡単に作ったり消したりしにくく、環境を復元しやすい後者の方法をとることにしました。

    1. /usr/local/apache/conf/httpd.confを編集する
       ユーザ「papa」さんの作成するコンテンツを、/nice-guy/ に見せたいとき、以下のような Alias を追記します。

      Alias /nice-guy/ "/home/papa/htdocs/"
      <Directory "/home/papa/htdocs">
      Options Indexes FollowSymLinks Includes
      AllowOverride All
      Order allow,deny
      Allow from all
      </Directory>

      なお、Optionsの内容は適宜読み替えてください。これは僕んちの場合です。
      また、これをしたってパパはナイスガイにはなりませんから、念のため(笑)

    2. コンテンツを作成する
       上記で指定したディレクトリにコンテンツを作成します(してもらう、かな)。パーミッションに気をつけないと、WEB上には見えませんから気をつけてくださいね。このディレクトリ自体が世界に対して検索可能(1755かな?)で、コンテンツが可視(644)なら大丈夫でしょう。

    3. Apacheを再起動する
       Apache の再起動は、上述の apachectl を使います。

      # /usr/local/apache/bin/apachectl restart

  3. 特定ディレクトリにパスワード制限をかける
     特定のディレクトリにパスワードによる参照制限をかけるには、2つの方法があります。一つは、httpd.conf内で管理者がかける制限。グローバルにコントロールできるので、管理者限定情報などでは勝手がいいでしょう。もう一つは、各ディレクトリに.htaccessファイルを置く個別の制限。各人で設定できる点や、狭い範囲でのコントロールにいいでしょう。
     ここでは、後者について触れます。.htaccessを編集する都合上、手元からTELNETできるて LinuxBox 上で vi(Plamoだとjvimなど)を使えるか、手元で編集したものをFTPによってアップロードできる、のいずれかが必要になります。

    1. /etcへ移動する
    2. /usr/local/apache/bin/htpasswd により、Basic認証用パスワードファイルを作成する

      #/usr/local/apache/bin/htpasswd -c [username]

       上記コマンドを実行すると、パスワードを2回聞かれるので、同じ物を入力する。なお、-cはファイル生成を指示するオプションであり、ユーザアカウント追加の場合はこのオプションをつけてはいけない
    3. 制限したいディレクトリへ移動し、.htaccessファイルを作成する
      内容は下記のようなもの
      authtype basic
      authname "Authentication Group/User Name"
      authuserfile /home/[hogehoge]/etc/[AuthFilename]
      <limit GET POST>
        require valid-user
      </limit>

  4. 外部公開用と内部用のサイトを1台のホストで作る〜VirtualHost
     会社のサーバでも自宅サーバでも、外部公開用のサイトと内部用サイトを1台のホストでできるとリソースが助かりますね。まぁ会社の場合はアベイラビリティの問題などでやっぱり2台にしたほうがいいかもしれませんが、自宅の場合は2台も動かしておくのもなんですから、ここは1台でやりたいところです。
     そこで、VirtualHostです。安全性もあがるので、一石二鳥です。お試しあれ。

  5. ログ解析ツールで統計情報を見る〜Webalizer
     多少規模の大きいイントラネットサイトや、世界に公開しているサーバだと、当然ログを解析したくなります。世の中にはいろいろとこの手のツールがありますが、ここでは『Webalizer』を使ってみました。こちらのメモをご覧下さい。
付録1.参考文献

O'REILLY Apache ハンドブック (ISBN4-900900-37-0) \3,400-
一応基礎知識として、一読をお勧めします
インフォサイエンス JAPACHE のページ
Apache-SSL日本語版などを積極的に公開している団体。でも、Apacheそのものはもちろんフリーで配布している。
ver1.3.x対応和文マニュアルやFAQなどがあるので、一度覗いてみては?
Japanized Apache サーバプロジェクトのページ
メーリングリストやFAQなどがある。MLの過去記事検索へのリンクがあるので、これは結構役に立つかも?
Linuxネットワーク
有名な小山本の第2弾、非常にお気楽にLinuxでインターネットサーバを作れそうな気がする、Linuxネットワーキングの入門書。
Linux Square
@IT内のコンテンツ群。最近非常にためになります。やたらと本を買わなくてもよくなり、小遣いが助かってます(笑)


Index >> Plamo Linux Fan >> Apacheメモ
images footer