日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache 静态编译和动态编译参考

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache 静态编译和动态编译参考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

apache-2.2.22?編譯安裝筆記

一、靜態編譯

????在使用./configure?編譯的時候,即沒有使用--enable-mods-shared=[module]或者--enable-[module]=shared這2個中的一個,那么所有的默認模塊為靜態。何謂靜態??其實就是編譯的時候所有的模塊自己編譯進httpd?這個文件中,啟動的時候這些模塊就已經加載進來了,也就是可以使用了,通常:<ifmodule> </ifmodule>?來配置。所以大家看到的配置都是<ifmodule??module.c>??,很顯然,module.c這個東西已經存在httpd這個文件中了。

?

第一次安裝不帶任何參數,只是指定一個安裝目錄

./configure --prefix=/app/apache2

我們來看看默認靜態編譯安裝有哪些模塊



二、動態編譯

就是編譯的時候,使用--enable-mods-shared=[module]或者--enable-[module]=shared?來動態編譯。?那么什么是動態??靜態是直接編譯進httpd中,?那么動態顯然就不編譯進去了,也就是你啟動的時候根本不會加載這個模塊,?而是給你一個module.so?文件,你一定要使用?loadmodule?這個語法來加載,這個模塊才有效。

?????那么區別就出來了:靜態的模塊通常是在httpd.conf文件中使用<ifmodule></ifmodule>?來配置,?動態使用loadmoule來加載,然后再配置。

?

第二次安裝使用動態編譯安裝,參數也只是多了一個

./configure --prefix=/app/apache2?--enable-mods-shared=all

?

1)?可以看到默認被編譯進httpd主文件只有幾個核心的模塊,也就是說這4個被靜態編譯進httpd主文件,隨著主進程的開啟就直接啟動模塊了。



?

2)?再查看httpd.conf配置文件中包含了以下LoadModule?模塊的行,共有51個,這些模塊的路徑都在modules/目錄下,這些就是被動態加載的模塊,如果你不需要某個模塊,只要在行首加#就可以。但這51個模塊并不是apache的所有模塊,這一點需要搞清楚,在這51個模塊之外的其他所有模塊都需要在編譯參數中明確指定,后面會講到這一點。

LoadModule authn_file_module modules/mod_authn_file.so

LoadModule authn_dbm_module modules/mod_authn_dbm.so

LoadModule authn_anon_module modules/mod_authn_anon.so

LoadModule authn_dbd_module modules/mod_authn_dbd.so

LoadModule authn_default_module modules/mod_authn_default.so

LoadModule authz_host_module modules/mod_authz_host.so

LoadModule authz_groupfile_module modules/mod_authz_groupfile.so

LoadModule authz_user_module modules/mod_authz_user.so

LoadModule authz_dbm_module modules/mod_authz_dbm.so

LoadModule authz_owner_module modules/mod_authz_owner.so

LoadModule authz_default_module modules/mod_authz_default.so

LoadModule auth_basic_module modules/mod_auth_basic.so

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule dbd_module modules/mod_dbd.so

LoadModule dumpio_module modules/mod_dumpio.so

LoadModule reqtimeout_module modules/mod_reqtimeout.so

LoadModule ext_filter_module modules/mod_ext_filter.so

LoadModule include_module modules/mod_include.so

LoadModule filter_module modules/mod_filter.so

LoadModule substitute_module modules/mod_substitute.so

LoadModule deflate_module modules/mod_deflate.so

LoadModule log_config_module modules/mod_log_config.so

LoadModule log_forensic_module modules/mod_log_forensic.so

LoadModule logio_module modules/mod_logio.so

LoadModule env_module modules/mod_env.so

LoadModule mime_magic_module modules/mod_mime_magic.so

LoadModule cern_meta_module modules/mod_cern_meta.so

LoadModule expires_module modules/mod_expires.so

LoadModule headers_module modules/mod_headers.so

LoadModule ident_module modules/mod_ident.so

LoadModule usertrack_module modules/mod_usertrack.so

LoadModule unique_id_module modules/mod_unique_id.so

LoadModule setenvif_module modules/mod_setenvif.so

LoadModule version_module modules/mod_version.so

LoadModule mime_module modules/mod_mime.so

LoadModule dav_module modules/mod_dav.so

LoadModule status_module modules/mod_status.so

LoadModule autoindex_module modules/mod_autoindex.so

LoadModule asis_module modules/mod_asis.so

LoadModule info_module modules/mod_info.so

LoadModule cgi_module modules/mod_cgi.so

LoadModule dav_fs_module modules/mod_dav_fs.so

LoadModule vhost_alias_module modules/mod_vhost_alias.so

LoadModule negotiation_module modules/mod_negotiation.so

LoadModule dir_module?modules/mod_dir.so

LoadModule imagemap_module modules/mod_imagemap.so

LoadModule actions_module modules/mod_actions.so

LoadModule?speling_module modules/mod_speling.so

LoadModule userdir_module modules/mod_userdir.so

LoadModule alias_module modules/mod_alias.so

LoadModule rewrite_module modules/mod_rewrite.so

?

./configure --prefix=/app/apache2 --enable-so --enable-mods-shared=all

結果:同上(只要--enable-mods-share=all,可以不用加--enable-so)

說明:

--enable-mods-shared=all?意思是動態加載所有模塊(并不是說apache所有的模塊都已經通過這條命令被加載進來了),--enable-mods=all表示靜態加載所有模塊(后面會有舉例)。由于編譯參數中使用了動態加載所有模塊,所以其它需要被編譯進來的模塊都會以動態加載模塊方式進行編譯。

?

三、通過舉例驗證

例舉1??我們來看以下這個編譯參數

./configure --prefix=/app/apache2
--enable-mods-shared=all
--enable-cache
--enable-mem-cache
--enable-file-cache
--enable-disk-cache

--enable-mods-shared=all?動態加載所有模塊,httpd.conf中默認會動態加載51個模塊(以LoadModule?開始的方式)。

--enable-cache --enable-mem-cache --enable-file-cache --enable-disk-cache?而這四個相關cache模塊會以動態模塊方式被加載,也就是httpd.conf中以LoadModule的模塊會多這4個,那就是共有55個動態模塊了。

從以上編譯參數可以看出只要編譯中有--enable-mods-shared=all?這個參數,那么之后所有你想要增加的模塊都會以動態模式來安裝,也就是最終在?httpd.conf?中以LoadModule形式來加載模塊。

有的朋友說還有一條?--enable-mods-shared=most?意思是動態加載大多數模塊,這個大多數其實就是在上面51個模塊中少了的那幾個模塊(用紅色表示出來了)。我個人覺得這個--enable-mods-shared=most?就是少了幾個模塊,并無實際什么特別,如果編譯參數中有這條,那么其他所有指定的模塊也都會以動態模塊來安裝。

?

例舉2??剛剛上面提到了--enable-mods=all我們來看看這個編譯參數

./configure --prefix=/app/apache2
--enable-mods=all
--enable-cache
--enable-mem-cache
--enable-file-cache
--enable-rewrite

--enable-mods=all?靜態編譯所有模塊,很明顯這個編譯參數是把所有的模塊將會以靜態方式來編譯,編譯好后,我們來看看結果



我們可以看到除了默認模塊,指定的幾個模塊(mod_file_cache.c??mod_cache.c??mod_mem_cache.c?mod_rewrite.c)都被靜態編譯進來了。

?

例舉3?這個參數跟例舉2的參數很相似,只是我指定幾個為動態加載模塊

./configure --prefix=/app/apache2
--enable-mods=all
--enable-cache=shared
--enable-mem-cache=shared
--enable-file-cache
--enable-rewrite=shared

其結果就是--enable-file-cache?是靜態編譯,其他3個有shared的都是動態編譯,在httpd.conf中以LoadModule?開頭的行。

?

例舉4

./configure --prefix=/app/apache2
--enable-modules=all

結果如下,有55個靜態模塊

core.c
mod_authn_file.c
mod_authn_dbm.c
mod_authn_anon.c
mod_authn_dbd.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_dbm.c
mod_authz_owner.c
mod_authz_default.c
mod_auth_basic.c
mod_auth_digest.c

mod_dbd.c
mod_dumpio.c
mod_reqtimeout.c
mod_ext_filter.c
mod_include.c
mod_filter.c
mod_substitute.c
mod_deflate.c
mod_log_config.c
mod_log_forensic.c
mod_logio.c
mod_env.c
mod_mime_magic.c
mod_cern_meta.c

mod_expires.c
mod_headers.c
mod_ident.c
mod_usertrack.c
mod_unique_id.c
mod_setenvif.c
mod_version.c
prefork.c
http_core.c
mod_mime.c
mod_dav.c
mod_status.c
mod_autoindex.c
mod_asis.c

mod_info.c
mod_cgi.c
mod_dav_fs.c
mod_vhost_alias.c
mod_negotiation.c
mod_dir.c
mod_imagemap.c
mod_actions.c
mod_speling.c
mod_userdir.c
mod_alias.c
mod_rewrite.c
mod_so.c

?

例舉5

./configure --prefix=/app/apache2
--enable-modules=all
--enable-mods-shared=all
--enable-cache=static
--enable-disk-cache=static
--enable-mem-cache=static
--enable-file-cache
--enable-ssl

結果是指定--enable-[module]=static的模塊為靜態編譯,其他都是動態編譯

?

總結三點:

1)?如果編譯參數中有--enable-mods-shared=all?或者--enable-mods-shared=most,那么所有--enable-[module]都將會以動態模式來編譯,除非特別指定--enable-[module]=static?為靜態編譯?。

2)如果編譯參數中有--enable-mods=all?指定所有靜態方式的話,還可以用--enable-[module]=shared來動態加載模塊。

3)特別注意如果編譯參數中既有--enable-mods=all靜態編譯又有--enable-mods-shared=all動態編譯,那么最終會使用動態編譯。

官方說是靜態編譯比動態編譯性能要好5%左右,具體沒有驗證過。

推薦編譯安裝參數,以下是靜態編譯所有模塊,但保留動態加載選項--enable-so,之后還是可以在配置文件中動態加載自己編譯的模塊。

./configure --prefix=/app/apache2
--enable-modules=all
--enable-cache=static
--enable-mem-cache=static
--enable-file-cache=static
--enable-disk-cache=static
--enable-ssl=satic
--enable-so

?

apache編譯配置參數:

http://blog.snsgou.com/post-240.html

http://blog.chinaunix.net/uid-20784749-id-1844507.html

?

關于動態編譯和靜態編譯的比方說明:

好比有兩個人a和m
a代表apache,m代表module
要想讓a使用m的東西
一個方法是把m的東西都放到a那里去,a使用的時候就是現成的了
就是所謂的靜態編譯

還有一個方法,
就是告訴a,?m的住址,當a要使用m的東西的時候,a去找m,然后使用
不過,這種方法要注意的一個問題就是:m必須要有實際的住址,
否則a會找不到m而產生錯誤的,我此文開始提到的?apachectl startssl產生
的錯誤就是這個原因,應該再編譯好ssl才可以的.
這種方法也就是apache?的動態(DSO)編譯了.

參考:http://httpd.apache.org/docs/2.4/

?

轉載于:https://www.cnblogs.com/Alight/p/4707100.html

總結

以上是生活随笔為你收集整理的apache 静态编译和动态编译参考的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。