既然apache也是調php解析器php-cgi.exe去執行php的,為啥一定要安裝apache呢?
為啥不是直接把請求給php-cgi.exe, 還要經過apache繞一下?
回複內容:
既然apache也是調php解析器php-cgi.exe去執行php的,為啥一定要安裝apache呢?
為啥不是直接把請求給php-cgi.exe, 還要經過apache繞一下?
一個php的地址請求的時序圖是這樣的,php-cgi是和apache之間進行fastcgi通訊的監守程式,是不能被去掉的。
當然apache還有一種不通過fastcgi進行調用php的方式,即apache模組方式:
LoadModule php5_module /usr/lib/apache/libphp5.so
這個時候時序圖上是沒有php-cgi這個實體的,apache直接調用php.
apache實現了http協議及相關內容,而php只是可以作為它的一個擴充而已
如果你用php實現http協議相關內容,也可以無需apache的。
當然你也可以這樣:
php -S 0.0.0.0:8080 -t /www
直接用php內建的web server,無需安裝apache。
PHP作為Apache的一個module(libphp5.so)整合到Apache進程(httpd)運行,這種mod_php的運行模式是最常用的,這時PHP的運行跟php-cgi沒有任何關係.mod_php的配置是這樣:
LoadModule php5_module modules/libphp5.soAddHandler application/x-httpd-php .php
可以配置extra/httpd-mpm.conf來控制Apache的進程數量.
如果你在Apache裡用mod_fcgid方式來運行PHP,則需要使用php-cgi,這時Apache作為有一個FastCGI進程管理器來管理php-cgi,在httpd.conf配置:
#載入mod_fcgid模組(不能和php5_module同時使用)LoadModule fcgid_module modules/mod_fcgid.soAddHandler fcgid-script .php#php-cgi的進程數量FcgidMaxProcesses 5#指定php-cgi來處理php請求FcgidWrapper /png/php/5.4.39NTS/bin/php-cgi .php#在需要使用php-cgi來執行PHP的Directory加上Options +ExecCGI,比如: Options +ExecCGI
另外在Linux上還有一種非常常用的組合,就是Nginx搭配php-fpm使用,其中php-fpm跟php-cgi沒有任何關係,php-fpm自身就整合了PHP解譯器,php-fpm有自己的進程管理器,只處理Nginx轉寄過來的PHP請求並返回,跟Nginx是松耦合的.
php-cgi.exe不是http伺服器,它接受的協議和apache完全不一樣。如果需要去掉apache就必須用php實現http協議,會導致很多無用代碼還可能有bug。
一個網站的構成,除了php產生的動態內容之外,還有其它的部分,比如靜態內容,如果由php去下發這些靜態內容的話,效率自然不如專門為這種工作最佳化過的web server來得高效。
除了靜態內容之外,還有記錄訪問日誌、url rewrite、http協議相關的很多東西,假設世界上沒有web server這種東西,那我們無論使用什麼語言來開發網站,都必須把這些東西寫一遍。把這些東西獨立出來,實現成為web server,就節約了大量的重複性勞動,而且無論後端使用任何語言,都可以直接通過部署到web server享受到這些便利。這一點其實跟我們在設計系統的時候把某些邏輯專門抽象封裝出來是一個道理。
別的不說,後端直接暴露在公網你還真敢幹啊。。