httpd(Apache)
httpd是世界使用排名第一的Web服務器,通過可擴展模塊可以加載各種支持服務。
本次使用源碼編譯的方式安裝httpd2.4。
首先httpd依賴于apr,apr-util,pcre(正則表達式庫)
所以先要安裝這三個依賴。
其中在編譯安裝apr-util的過程中出現了如下錯誤
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
經過搜索得知是缺少了expat的開發庫,使用apt install libexpat1-dev
安裝后順利編譯成功。
再次安裝pcre后配置如下:
./configure \
--with-pcre=/usr/local/pcre \
--prefix=/usr/local/httpd \
--enable-so \
--enable-cgi \
--enable-rewrite
經過編譯安裝后,進入/usr/local/httpd/bin,執行httpd
然后訪問http://192.168.231.128/
可以看到一個h1的It works!
apache.png
安裝nginx
nginx的默認依賴庫有兩個:pcre,zlib(gz壓縮)
pcre在上一部分已經安裝了,故再次編譯安裝zlib
最終配置如下:
./configure --with-pcre=/root/pcre-8.41 --with-zlib=/root/zlib-1.2.11
本次需要配置的依賴庫路徑為對應的源碼路徑。
配置完成后編譯安裝
進入/usr/local/nginx/sbin
執行./nginx
啟動服務
訪問http://192.168.231.128/
可以看到啟動成功的標識:
nginx.png
CGI/FastCGI
CGI作為一種即用即調用的通用接口,優勢是不常駐內存,每次請求之間不會互相影響,不會因為長時間的運行導致內存泄漏或者其他方面的問題。然而劣勢就是fork&run,每次首先開啟新的進程->加載資源->處理請求->釋放資源,在面對大量的請求時會略有性能方面的影響。
FastCGI相對于CGI確實變的快了,在啟動時便啟動多個進程等待請求到來,當有請求到來時,WebServer轉發請求給FastCGI,然后FastCGI直接進行處理,處理完成之后再次進入就緒狀態。相對來講免去了CGI的fork過程,處理速度會有一些提升,然而FastCGI也有一些致命缺陷:
- 運行的腳本有Bug導致某些請求長時間卡住,那么當卡死的進程超過FastCGI開啟的進程數后,以后的所有請求都將無法獲得結果。
- 當長時間運行時進程可能會掛掉,這時候需要一個守護進程監管工作進程并做拉起操作。