• ベストアンサー

Apache2 静的・動的モジュールとは?

Apacheの勉強をしているちに、「静的にモジュールを組み込む」「動的にモジュールを組み込む」とはどういうことなんだろう?と思い始めました。 本やサイトで調べてみると「動的にモジュールを組み込むには「mod_so」を静的に組み込む必要がある」と解説してありましたが、この「静的」「動的」とはどのようなことを指すのでしょうか? 解りやすく解説してある本やサイト等を教えていただければ助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rentahero
  • ベストアンサー率53% (182/342)
回答No.3

> そこでひとつ確認しておきたいのですが、 > ./configure --enable-so --enable-mods-shared="most"又は"all" > で最初に動的にモジュールを一気に入れてしまって、 > 必要に応じてhttpd.confを編集し直すというやり方でも > 問題ないでしょうか? 問題ないです。ただし、依存性のあるモジュールに注意して設定を行うことに注意を払うようにしてください。 これさえ忘れなければ、それが現在のところ一番簡単な設定方法になっています。 一例をあげれば、mod_limitIPconnは、mod_Statusに依存しています。

mega-aki
質問者

お礼

再度、回答ありがとうございます。 依存関係を注意しながらこの方法でやっていきたいと思います。 設定が難しそうですがmod_limitIPconはアクセス制御をする時に役立ちそうですね。 いずれチャレンジしてみようと思います。 この度は色々とありがとうございました。

その他の回答 (2)

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

「動的」「静的」ということそのものの意味は#1の方のご説明のとおりです では、apacheの場合どうすれば静的に組み込めるのかというと、configure(コンパイル前の設定コマンドです)時に--enable_module=soとしたら、mod_soが静的に組み込まれます。 すなわち、コンパイル時に組み込むことを「静的に組み込む」と言います。 これに対して、起動時に呼び出すよう設定することを「動的に組み込む」といいます。 apacheでは、mod_soが「動的な」組み込みをサポートしているため、mod_soがなければ「動的な」組み込みはできません。だから、mod_soはコンパイル時に「静的に」組み込む必要があるわけです。 また、apacheにおける動的組み込みと静的組み込みの間での動作の差はほとんどありません。 apacheは、常時動作するデーモンプログラムとして設計されているので、機能が必要になるかどうかに関係なく、httpd.confでLoadModule指定されていると必ず読み込まれます。したがって、メモリの節約にはなりませんし、起動時間も結果としてほぼ同じになってしまいます。 では、どう違うのかというと、動的に組み込んでいると、必要がなくなればhttpd.confを編集して再起動するだけでhttpdをコンパイルしなおさなくても、動作を変更できるという点がもっとも違います。 また、この点が動的組み込みの最大の利点となります。

mega-aki
質問者

補足

回答ありがとうございます Apacheにおける「静的」「動的」のしくみについてよく理解できました。 今まで静的にモジュールを組み込んでいたせいで新たにモジュールを組み込む時はいつも再コンパイルいていたのでかなり面倒でした。 そこでひとつ確認しておきたいのですが、 ./configure --enable-so --enable-mods-shared="most"又は"all" で最初に動的にモジュールを一気に入れてしまって、必要に応じてhttpd.confを編集し直すというやり方でも問題ないでしょうか?

  • unimentai
  • ベストアンサー率70% (34/48)
回答No.1

ご質問事項へ回答します。 『静的』と『動的』の違いですが、モジュールがメモリ上に展開される タイミングの違いを表しています。 まず『静的』モジュールついてですが、メインプログラムがメモリに展開される時に 一緒に展開され、メインプログラムが終了するまで展開され続ける方式です。 常にメモリ上に展開されている為、動作速度の向上が望めますが、その分メモリを 消費します。 次に『動的』モジュールですが、普段はメモリ上には展開せず、機能が必要になった場合 にメインプログラムから適宜呼び出し、必要なくなれば切り離す方式です。 メモリの消費を最小限に抑えられますが、呼び込み作業が必要な為、動作速度は あまり期待出来ません。 如何でしょうか? 上記『静的/動的モジュール』については、Apache固有の機能と言うわけではなく、 プログラミング全般に関わるものですので、以下のサイト等を参考にしてみて下さい。

参考URL:
http://docs.sun.com/source/806-4837/Building.html
mega-aki
質問者

お礼

回答ありがとうございます。 「静的」「動的」の違いよく解りました。 Apacheだけではなくプログラミング全般に言えることだったのですね。 紹介していただいたサイトもこれからの勉強にも大いに参考になりそうです。 ありがとうございました。

関連するQ&A

  • apache apxsによるモジュール追加

    apacheをconfigure時にmod_soを指定しインストールした場合、再コンパイル無しでモジュールの追加ができるという認識でしたが、 apache標準モジュールでも追加の出来ないものがあるのでしょうか? 下記サイトでは、rewrite_moduleの追加方法があるのですが、他のモジュールも同じ方法で出来るのでしょうか? 【参考サイト】 http://kazmax.zpp.jp/apache/apache3.html また、3rdpartyモジュールがあれば、ダウンロードしコンパイルする事で追加可能ですが。。。。 3rdpartyモジュールが無く、apache標準モジュールでも追加の出来ないものがあるのであれば、再コンパイルになると思うのですが.... apache標準モジュールでも追加の出来ないものがあるのか わかる方いらっしゃいましたら教えて下さい。 もし、追加可能であり、上記参考サイトの方法以外であれば、教えて 頂きたいのですが。

  • apacheのモジュールについて

    Apache初心者で勉強中です。 Fedoracore5既存のApache2でモジュールを追加する方法がわからず困っています。 具体的には、下記のことががわかりません。 1."mod_perl2"を入れたいが、Fedoracore5既存のApache2がインストールされているディレクトリが、どこを指すのかわからない。  ("/etc/httpd/conf/" or "/usr/sbin/"?) 2."mod_deflate"をコンパイルしたいが、"mod_deflate.c"のあるディレクトリがわからない。 また、よろしければでいいのですが、apacheは、「OS既存」と「ソースをインストールしたもの」、どちらが使い勝手がよいでしょうか。 お答えいただけると幸いです。 初心者ゆえ、もしかしたら、言葉のはき違いがあるかもしれませんが、よろしくお願いいたします。

  • ApacheにおけるSSLモジュールの動作

    以下の環境でssl通信(https)を計画しています。 OS:RedHat Linux AS 4 Web:Apache 2.0 Apache2.0からはsslのモジュールは標準機能だと思っているのですが、 httpd.confに次の様に設定するとエラーとなり、httpdが起動しません。 <VirtualHost *:443> ServerName hogehoge.example.com SSLProxyEngine on    ・    ・    ・ </VirtualHost> エラーの内容: Invalid command 'SSLProxyEngine', perhaps misspelled or defined by a module not included in the server configuration mod_sslがincludeされていないためと考え、httpd.confにmod_ssl.soを追加しましたが、mod_ssl.soが存在しないため、エラーとなり、やっぱり起動できません。 質問内容 (1)Apache 2.0 でSSLProxyEnginディレクティブの正しい定義の仕方を教えてください。 (2)必要であれば、mod_sslを追加で導入する手順について教えてください。  ApacheはDSOサポート環境です。(mod_so.cがあります) よろしくお願いいたします。

  • DB接続を行うApacheモジュールをApacheに追加して、Apacheを再起動するとエラー

    皆さんこんにちは。 Apacheモジュールを作りを行っていました。 モジュール内で、 MySQLにコネクションをはり、 queryリクエストの往来を行うだけの単純なものです。 モジュールの作成から次の順序で作業を進めました。 ----------------------------- (1)モジュールの作成 (2)モジュール(1)のmakeを行う -> make成功 (3)モジュールのsoファイルを配置。 /usr/local/apache2/modules/ に make時に作成された モジュールの「soファイル」を配置。 (4)httpd.confの編集 httpd.confに 作成したモジュールのディレクティブを挿入。 LoadModule db_connect_module modules/db_connect.so <Location /db_connect> SetHandler db_connect </Location> (5)Apacheのリスタート ----------------------------- (5)でapacheの再起動を行うと、 次のエラーが表示されました。 httpd: Syntax error on line 96 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_db_connect.so into server: /usr/local/apache2/modules/mod_db_connect.so: undefined symbol: mysql_query ここで不思議だったのは、 確かに、 作成したMySQLに接続するためのApacheモジュール内で、 「mysql_query」を利用していますが、 そのモジュールのmake時には エラーが表示されていなかったし、 make時にエラーが出なかったとおり、 モジュール内のソースでも、 記述した「mysql.h」も正常にインクルードされていると思います。 どうして、 apacheのhttpd.confは 「mysql_query」に関する 上記のエラーを出してくるのでしょうか? どなたか考えられる原因を アドバイスいただけるとありがたい次第です。 以上どうぞ宜しくお願い致します。

  • Apacheモジュールの追加方法

    ./configure --enable-module=so --enable-shared=max --activate-module= src/modules/php4/libphp4.a で、ApacheをLinuxへインストールしたのですが、mod_userdir.soがないというエラーになります。 モジュールを追加するにはどうすれば良いでしょうか? /etc/rc.d/init.d/httpd start Starting httpd: Syntax error on line 217 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/mod_userdir.so into server: /usr/local/apache/libexec/mod_user dir.so: undefined symbol: ap_os_is_path_absolute 又、Apacheはmodule=maxだとWWWサーバが 重くなるでしょうか?

  • Apacheモジュールのコンパイルの件で質問させていただきます。

    Apacheモジュールのコンパイルの件で質問させていただきます。 Apacheモジュールを作成し、 makeにてコンパイルしたところ、 正常にコンパイルが出来ましたので、 confにモジュール動作の記述を入れ、 Apacheを再起動したところ、 soファイルに、 「abc」という関数が定義されていない! ----- # /usr/local/apache2/bin/apachectl restart httpd: Syntax error on line 58 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_test.so into server: /usr/local/apache2/modules/mod_test.so: undefined symbol: abc ----- という事で叱られてしまいました。 「abc」という関数は、 作成したApacheモジュールで確かに使用しており、 「test.h」という自作ライブラリに入っている関数でありますが、 そのモジュールをコンパイルしたときは、 何も怒られず正常にコンパイルが成功していて、 モジュール内に記述した「test.h」も 正常にincludeできていたと思われます。 モジュールのコンパイルの時は 正常にコンパイルできて、 Apacheの再起動時には怒られるといいのは、 パスの参照先が Apache起動時とコンパイル時で異なるからという事でしょうか? 合っているかわかりませんが、 念のため、 以下の通りパスを追記する場所で、 関数「abc」を記述しているライブラリの場所を追記してみたのですが、 やはり、Apache起動を試みると、 soファイル内の関数(abc)何て知らん!と怒られてしまいました。 ----- # vi /etc/ld.so.conf # ldconfig # LD_LIBRARY_PATH=/home/test/; export LD_LIBRARY_PATH ----- こうゆう場合、 どうすれば、モジュールのsoファイルを 正常に読んでくれて、Apacheを起動してくれるでしょうか。 何かアドバイスいただけるとありがたいです。 宜しくお願い致します。 開発OSはFedora9です。ApacheモジュールはCで普通に書いています。

  • Apache2.0ではじめてモジュールの追加

    現在、LinuxサーバにてApache2.0を利用しています。 mod_proxyが必要になったためモジュールの追加を行わなければなりません。 Apache2.0をインストール時のConfigureオプションでは、 インストール先を指定しただけでモジュール追加のオプションは指定して いませんでした。 ./configure --prefix=/usr/local/apache2 モジュールの追加をいままで行ったことがないので 手順が分かっていません。 もう一度 Apacheをインストール configure make && make install しなければならないのでしょうか。 運用中のApacheをできるだけ止めることなく安全に追加したいのですが、 良い方法はありますでしょうか。 こちらが現在の環境です。 Linux2.6 jakarta-tomcat-5.0.28 j2sdk-1_4_2_12 httpd-2.0.58 ご存知のかた教えてください。

  • Apacheモジュールについてなんですが

    始めまして、初心者のtarkeyです。さっそくですがApacheのモジュール、 ”mod_auth_mysql”を探しているのですが(Windows用)某書籍には、 ”http://www.mm4.de/php4win/download.php3?strFile=apachemoduleauthmysql.zip” にあるそうですがリンク切れで手詰まっています。 http://modules.apache.orgなんかでも探しましたがWindows用のはありませんでした。 どなたご存知の方、お助けください、よろしくお願いします。

  • Apacheモジュールの二重インストール

    Apacheのモジュールについて質問です。Debianで動かしています。Apacheは1.3.33です。 いろいろ設定をいじって確認しているうちに、誤ってかapachectlで設定をチェックすると、mod_mimeが無いと表示されるようになりました。そこで、Apacheのソースからmod_mimd.cを取って来て、apxsで入れました。 その結果、apahectlではSyntax OKとなりましたが、代わりに以下のような警告が出るようになってしまいました。 # apachectl configtest [Sat May 21 00:37:55 2005] [warn] module mime_module is already loaded, skipping [Sat May 21 00:37:55 2005] [warn] module mod_mime.c is already added, skipping 使用できるものの、apachectlを実行すると毎回以下のような警告が出てしまうので、何とかできないものかと思っております。どうやらモジュールmod_mimeが二重にインストールされた状態になっていると思います。なお、apacheはapt-getでアンインストール、インストールし直しましたが、状況は変わりませんでした。 よろしくお願いいたします。

  • apacheのアップデートで依存性の欠如

    RedHatLinux7.0でapache1-3-22へアップデートしようと思い、rpmファイルをgetしました。 下記の様にしたところ、メッセージが出ました。 # rpm -Uvh /tmp/rpm/apa* エラー: 依存性の欠如: mod_bandwidthは apache-1.3.22-5.7.1 に必要とされています mod_putは apache-1.3.22-5.7.1 に必要とされています mod_throttleは apache-1.3.22-5.7.1 に必要とされています libexpat.so.0 は apache-1.3.22-5.7.1 に必要とされています libmm.so.11 は apache-1.3.22-5.7.1 に必要とされています この内の、mod*の3つのrpmは見つけてきたのですが、libexpat.so.0,libmm.so.11というのが見つかりませんでした。 これらは一般的にどこから見つければいいのでしょうか。 また、過去の質問で、httpdを止めてやるとうまくいく様なのでやってみましたところ下記のようでした。 # rpm -Uvh /tmp/rpm/mod* /tmp/rpm/apa* エラー: 依存性の欠如: libexpat.so.0 は apache-1.3.22-5.7.1 に必要とされています libmm.so.11 は apache-1.3.22-5.7.1 に必要とされています やはり、この2つのファイルが欠如として出てしまいます。 過去のアップデートのrpmを全てgetして、rpm -Uvh等とすれば解決するのでしょうか? また、インストールしたLinuxは、できるLinuxサーバという本についていた物ですが、そもそもこれが問題で正式な物でインストールするべきなのでしょうか? 宜しくお願いいたします。