1. 程式人生 > >Linux下安裝Apache+php環境

Linux下安裝Apache+php環境

準備工作:

Apache:http://httpd.apache.org/download.cgi

備註:根據需要選擇安裝的版本

httpd-2.2.x(prefork)

httpd-2.4.x(event) ,編譯時可以使用--with-mpm=prefork手動指定其使用prefork

PHP官方推薦httpd使用prefork(php能更穩定地執行),而不是執行緒化的worker和event,httpd-2.4.x預設使用執行緒化的event作為mpm。Linux上很多PECL庫都是非執行緒安全的,libphp5.so線上程化的httpd(event/worker)中執行可能會出現一些問題,為了保持相容性和穩定性,PHP一般還是使用httpd-2.2.x(prefork)這個分支。


PHP:http://php.net/downloads.php

安裝步驟:

1. 從上面列出的地方獲取 Apache 原始碼包,然後解壓:

gzip -d httpd-2_x_NN.tar.gz
tar -xf httpd-2_x_NN.tar

2. 同樣,獲取 PHP 原始碼包並解壓:
gzip php-NN.tar.gz
tar -xf php-NN.tar

3. 編譯並安裝 Apache。請參考 Apache 安裝文件瞭解編譯 Apache 的更多細節。
cd httpd-2_x_NN
./configure --enable-so
make
make install

4. 現在已經將 Apache 2.x.NN 安裝在 /usr/local/apache2。本安裝支援可裝載模組 和標準的 MPM prefork。之後,可以使用如下命令啟動 Apache 伺服器:
/usr/local/apache2/bin/apachectl start

5. 現在需要配置並編譯 PHP。在這裡可以用各種各樣的引數來自定義 PHP,例如啟動哪些擴充套件功能包的支援等。用 ./configure --help 命令可以列出當前可用的所有引數。在此例中,將給出一個在有 MySQL 支援的 Apache 2 上進行配置的範例。
如果按照上面的說明從原始碼編譯了 Apache,下面的例子會正確匹配 apxs 的路徑。如果通過其他方式安裝了 Apache,需要相應的調整 apxs 的路徑。注意,在有些發行版本中,可能將 apxs 更名為 apxs2。
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
make
make install
如果決定在安裝後改變配置選項,只需重複最後的三步 configure,make,以及 make install,然後需要重新啟動 Apache 使新模組生效。Apache 不需要重新編譯。
請注意,除非明確有提示,否則“make install”命令將安裝 PEAR、各種 PHP 工具諸如 phpize,並安裝 PHP CLI 等等。

6. 配置 php.ini

cp php.ini-development /usr/local/lib/php.ini

可以編輯 php.ini 來設定 PHP 執行時的選項。如果想要把此檔案放到另外的位置,需要在步驟 5 新增 --with-config-file-path=/path 選項。
如果選擇了 php.ini-production,請務必閱讀其中的變更列表,它們將影響 PHP 的執行。


7. 編輯 httpd.conf 檔案以呼叫 PHP 模組。LoadModule 達式右邊的路徑必須指向系統中的 PHP 模組。以上的 make install 命令可能已經完成了這些,但務必要檢查。
LoadModule php5_module modules/libphp5.so

8. 告知 Apache 將特定的副檔名解析成 PHP,例如,讓 Apache 將副檔名 .php 解析成 PHP。為了避免潛在的危險,例如上傳或者建立類似 exploit.php.jpg 的檔案並被當做 PHP 執行,我們不再使用 Apache 的 AddType 指令來設定。參考下面的例子,你可以簡單的將需要的副檔名解釋為 PHP。我們演示為增加.php。
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
或者,你也想將 .php,.php2,.php3,.php4,.php5,.php6,以及 .phtml 檔案都當做 PHP 來執行,我們無需額外的設定,僅需按照下面這樣來:
<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
然後,可以將 .phps 檔案由 PHP 原始碼過濾器處理,使得其在顯示時可以高亮原始碼,設定如下:
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>
mod_rewrite 也有助於將那些不需要執行的 .php 檔案的原始碼高亮顯示,而並不需要將他們更名為 .phps 檔案:
RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
不要在正式生產運營的系統上啟動 PHP 原始碼過濾器,因為這可能洩露系統機密或者嵌入的程式碼中的敏感資訊。

9. 按照通常的方式啟動 Apache 服務:
/usr/local/apache2/bin/apachectl start
或者
service httpd restart
備註:要能夠使上面的指令可用,需先將apache註冊為系統服務,用下面的指令:
cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd #ubuntu

按照上面的步驟便可以使 Apache 2.x 將 PHP 作為 SAPI 模組了。當然 Apache 和 PHP 都還有很多配置選項,可以在相應的原始碼目錄中使用 ./configure --help 獲得更多資訊。
假如要編譯一個多執行緒版本的 Apache,可在編譯時選擇用 worker MPM 來替換標準的 prefork MPM。只需在上面的第 3 步使用:

--with-mpm=worker
如果不是很明確這樣做的後果並且大概理解其含義的話,最好不要進行這一步。更多資訊請參考 Apache 文件中關於 » MPM-Modules 的部分。
注意:要編譯多執行緒版本的 Apache,系統必須支援多執行緒。這也意味著需要將 PHP 編譯為正處在試驗階段的 Zend Thread Safety(ZTS),因此並不是所有的擴充套件都可以使用了。推薦編譯 Apache 使用標準的 prefork MPM-Module。

配置Apache開機自動啟動

cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
chmod 700 /etc/init.d/httpd
vi /etc/init.d/httpd
   #在第一行後增加(不包括引號)
   "#chkconfig: 2345 90 90"
   "#description:http server"
   #注意:沒有這幾行,在使用chkconfig時會提示你:service httpd does not support chkconfig。
chkconfig --add httpd
chkconfig --level 2345 httpd on

ubuntu下可以使用sysv-rc-conf和update-rc.d,推薦sysv-rc-conf,是圖形化的。