
嘗試在 DigitalOcean 雲端伺服器下新建的 CentOS 節點中使用 PHP 設定 Apache VirtualHosting 環境。
問題是,雖然虛擬主機本身可以工作,但 PHP 不能。
伺服器設定:
- 網路伺服器:CentOS 6.5 和 Apache/2.2.15
- PHP 版本:5.3.3(用作 Apache 模組)
採取的步驟:
以以下身分登入根用戶,
- 安裝 Apache 和 php :
yum -y install httpd php
- 建立一個新的虛擬主機設定文件,如下所示:
文件:/etc/httpd/conf.d/vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
- 為虛擬主機網站建立新目錄
就像下面這樣,
mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
- 放置一個
.php
和.html
測試文件,如下所示:
/srv/www/example.org/public_html/
(DocumentRoot)下的文件
echo "<HTML>It work's</HTML>" > /srv/www/example.org/public_html/index.html
echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php
接下來,當我將瀏覽器指向 時index.html
,它就起作用了。但當我將我的瀏覽器指向index.php
空白頁面。
故障排除
(我已經做過/檢查過但沒有運氣的事情)
- 確保 Apache 正在運行並且
DocumentRoot
可訪問 - 所有目錄
755
和文件644
- 檢查了 Apache 訪問日誌。 html 頁面請求的狀態代碼為 200,但
.php
訪問日誌中沒有頁面請求 - Apache 或 PHP 錯誤日誌中沒有錯誤,
/var/log/messages
- 嘗試新增
php_admin_flag engine on
虛擬主機設定檔
另請參閱下面的內容/etc/httpd/conf.d/php.conf
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
DirectoryIndex index.php
答案1
根據我的經驗,當 PHP 遇到嚴重的潛在錯誤時,它會呈現一個空白頁面。它通常很容易修復,但不幸的是,Apache 日誌、PHP 日誌或系統日誌中通常不會記錄任何內容,這使得故障排除過程變得困難。
使用以下命令查找 php.ini 設定檔:
php -i | grep "php.ini"
這應該會產生類似這樣的結果:
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
使用您喜歡的文字編輯器編輯此設定檔(在本例中為 /etc/php.ini),並確保開啟顯示錯誤和啟動錯誤。這些條目應如下所示:
display_errors = On
display_startup_errors = On
最後重新啟動 Apache,以便它讀取新的 PHP 配置並透過curl 或瀏覽器存取您的頁面。這應該會產生一條錯誤訊息,這將有助於故障排除過程。
答案2
您應該做的第一件事是檢查您在 Apache 配置中設定的 Apache 錯誤日誌;複製如下:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.org
ServerAlias www.example.org
DocumentRoot /srv/www/example.org/public_html/
ErrorLog /srv/www/example.org/logs/error.log
CustomLog /srv/www/example.org/logs/access.log combined
</VirtualHost>
PHP 在 Apache 下運行,因此彈出的任何錯誤都會顯示在伺服器日誌中。我建議登入伺服器並tail
像這樣使用:
tail -f -n 200 /srv/www/example.org/logs/error.log
但這是您的一般 Apache 日誌嗎?還是這是 DigitalOcean 的設定?因為那條路/srv/www/example.org/logs/
看起來很奇怪。在標準 Linux 下,它會位於這樣的位置:
tail -f -n 200 /var/log/apache2/error.log
無論日誌實際發送到何處,這都將是伺服器上 PHP 和 Apache 發生或未發生情況的關鍵。