apache动态编译/静态编译区别
生活随笔
收集整理的這篇文章主要介紹了
apache动态编译/静态编译区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結
百度 google了好多文檔!
關于靜態的缺點是:編譯進APACHE內核,如果要新加模塊,要重新編譯;
動態:DSO模式動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。
下面是官方的解釋:
模塊選項
有兩種使用模塊的方法:一是靜態連接進核心,二是作為DSO模塊動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。如果希望核心能夠裝載DSO,但不實際編譯任何DSO模塊,則需明確指定"--enable-so=static"。
現在在網上好多裝APACHE的時候都會用 --enbale-so ,其實我認為這個有時候不是很必要的!
讓apache 核心裝載DSO,但是不實際編譯任何動態模塊
要Module所有模塊:
--enable-mods-shared=all
要Module大部分模塊:
--enable-mods-shared=most
編譯以后DSO會自動裝載 LoadModule,編譯的模塊
靜態編譯:
--enable-modules=most
--enable-modules=all
我的建議是,動態加載所有模塊,然后在httpd.conf中配置!
官方文檔:
Quotation
一般語法
一般情況下你可以使用如下語法啟用或者禁用某個模塊:
--disable-MODULE
禁用MODULE模塊(僅用于基本模塊)
--enable-MODULE=shared
將MODULE編譯為DSO(可用于所有模塊)
--enable-MODULE=static
將MODULE靜態連接進核心(僅用于擴展和實驗模塊)
--enable-mods-shared=MODULE-LIST
將MODULE-LIST中的所有模塊都編譯成DSO(可用于所有模塊)
--enable-modules=MODULE-LIST
將MODULE-LIST靜態連接進核心(可用于所有模塊)
上述 MODULE-LIST 可以是:
(1)用引號界定并且用空格分隔的模塊名列表
--enable-mods-shared='headers rewrite dav'
(2)"most"(大多數模塊[遇見錯誤模塊時忽略該模塊而不中斷配置過程])
(3)"all"(所有模塊[遇見錯誤模塊時中斷配置過程并報錯])
--enable-mods-shared=most
注意
configure將忽略MODULE和MODULE-LIST中的拼寫錯誤,注意仔細拼寫。用于MODULE和MODULE-LIST中的名稱是"mod_NAME"中去掉"mod_"并將剩余部分中的下劃線"_"替換為連字符"-"以后的結果,比如"mod_log_config"模塊應當表示為"log-config"。
官方說明:http://www.phpchina.com/manual/apache/programs/configure.html
百度文檔,的方法!
Quotation
以前編譯apache的時候
都是google搜索到的直接拿來用
這次自己編譯mod_rewrite和ssl遇到了問題
又不知道問題出在哪里
一個是mod_rewrite模塊沒有起作用
一個是以ssl啟動apache的時候報告如下錯誤:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free
后來經過查找
明白了問題出在哪里
當時我是這么編譯apache的
./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
而問題就出在–enable-so
現在知道了–enable-so的意思是說
讓apache 核心裝載DSO,但是不實際編譯任何動態模塊
–enable-ModuleName的意思是說 編譯并包含模塊ModuleName
而 –enable-ModuleName=shared 的意思是說將這個模塊編譯成動態的.
明白了這幾個選項的意思,感覺就水落石出了
根據上面的總結
我應該去掉–enable-so這行
如何希望動態編譯模塊
比如:–enable-rewrite應該替換為: –enable-rewrite=shared
最后,我將要編譯的應該為:
./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
上面中 –enable-mods-shared=most的意思是說 動態的編譯進來大多數的模塊
而 –enable-mods-shared=all是指動態的編譯所有的模塊
如果把-shared去掉,就是靜態的編譯了…
綜上所述
總結出了我個人對apache的動態與靜態編譯的理解
好比有兩個人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)編譯了
我的configure文件:
Quotation
./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --enable-ssl=shared --enable-rewrite=shared --enable-alias=shared --enable-include=shared --enable-headers=shared --enable-info=shared --with-threads=yes
其實
./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --with-threads=yes
就可以了!
?
百度 google了好多文檔!
關于靜態的缺點是:編譯進APACHE內核,如果要新加模塊,要重新編譯;
動態:DSO模式動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。
下面是官方的解釋:
模塊選項
有兩種使用模塊的方法:一是靜態連接進核心,二是作為DSO模塊動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。如果希望核心能夠裝載DSO,但不實際編譯任何DSO模塊,則需明確指定"--enable-so=static"。
現在在網上好多裝APACHE的時候都會用 --enbale-so ,其實我認為這個有時候不是很必要的!
讓apache 核心裝載DSO,但是不實際編譯任何動態模塊
要Module所有模塊:
--enable-mods-shared=all
要Module大部分模塊:
--enable-mods-shared=most
編譯以后DSO會自動裝載 LoadModule,編譯的模塊
靜態編譯:
--enable-modules=most
--enable-modules=all
我的建議是,動態加載所有模塊,然后在httpd.conf中配置!
官方文檔:
Quotation
一般語法
一般情況下你可以使用如下語法啟用或者禁用某個模塊:
--disable-MODULE
禁用MODULE模塊(僅用于基本模塊)
--enable-MODULE=shared
將MODULE編譯為DSO(可用于所有模塊)
--enable-MODULE=static
將MODULE靜態連接進核心(僅用于擴展和實驗模塊)
--enable-mods-shared=MODULE-LIST
將MODULE-LIST中的所有模塊都編譯成DSO(可用于所有模塊)
--enable-modules=MODULE-LIST
將MODULE-LIST靜態連接進核心(可用于所有模塊)
上述 MODULE-LIST 可以是:
(1)用引號界定并且用空格分隔的模塊名列表
--enable-mods-shared='headers rewrite dav'
(2)"most"(大多數模塊[遇見錯誤模塊時忽略該模塊而不中斷配置過程])
(3)"all"(所有模塊[遇見錯誤模塊時中斷配置過程并報錯])
--enable-mods-shared=most
注意
configure將忽略MODULE和MODULE-LIST中的拼寫錯誤,注意仔細拼寫。用于MODULE和MODULE-LIST中的名稱是"mod_NAME"中去掉"mod_"并將剩余部分中的下劃線"_"替換為連字符"-"以后的結果,比如"mod_log_config"模塊應當表示為"log-config"。
官方說明:http://www.phpchina.com/manual/apache/programs/configure.html
百度文檔,的方法!
Quotation
以前編譯apache的時候
都是google搜索到的直接拿來用
這次自己編譯mod_rewrite和ssl遇到了問題
又不知道問題出在哪里
一個是mod_rewrite模塊沒有起作用
一個是以ssl啟動apache的時候報告如下錯誤:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free
后來經過查找
明白了問題出在哪里
當時我是這么編譯apache的
./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
而問題就出在–enable-so
現在知道了–enable-so的意思是說
讓apache 核心裝載DSO,但是不實際編譯任何動態模塊
–enable-ModuleName的意思是說 編譯并包含模塊ModuleName
而 –enable-ModuleName=shared 的意思是說將這個模塊編譯成動態的.
明白了這幾個選項的意思,感覺就水落石出了
根據上面的總結
我應該去掉–enable-so這行
如何希望動態編譯模塊
比如:–enable-rewrite應該替換為: –enable-rewrite=shared
最后,我將要編譯的應該為:
./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl
上面中 –enable-mods-shared=most的意思是說 動態的編譯進來大多數的模塊
而 –enable-mods-shared=all是指動態的編譯所有的模塊
如果把-shared去掉,就是靜態的編譯了…
綜上所述
總結出了我個人對apache的動態與靜態編譯的理解
好比有兩個人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)編譯了
我的configure文件:
Quotation
./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --enable-ssl=shared --enable-rewrite=shared --enable-alias=shared --enable-include=shared --enable-headers=shared --enable-info=shared --with-threads=yes
其實
./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --with-threads=yes
就可以了!
?
?
轉載于:https://blog.51cto.com/scanty/485267
總結
以上是生活随笔為你收集整理的apache动态编译/静态编译区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费在线调查系统:调查派 http://
- 下一篇: 想知道大家毕业后的发展道路