
DigitalOcean クラウド サーバーの下に新しく作成された CentOS ノードで、PHP を使用して Apache VirtualHosting 環境をセットアップしようとしています。
問題は、仮想ホスティング自体は機能しているが、PHPは機能していない。
サーバーのセットアップ:
- Web サーバー: 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
vhost設定ファイルに追加してみました
以下の内容もご覧ください/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 ログ、または syslog に何も記録されないため、トラブルシューティング プロセスが困難になります。
次のコマンドを使用して 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 で何が起こっているか (または起こっていないか) を知る鍵となります。