2011-01-19 17 views
77

私のアプリで特定のアドレスにHTTP POSTをしようとすると500 Internal Serverエラーが発生します。私は、仮想ホストファイルで指定されたカスタムログディレクトリのサーバーログを調べましたが、エラーは表示されませんので、これをデバッグすることはお尻の痛みでした。内部エラー500 Apacheですが、ログには何もありませんか?

Apacheに内部500エラーをエラーログに記録させるにはどうすればよいですか?

+0

私は同じ問題を仮想ホストでPHPを使用していました....エラーはありません(Apache2、Ubuntu)。PHPモジュール(mysql、jsonなど)が見つからなくなった –

+0

私たちはアクセスログにそれらを送信していました(おそらくApacheの観点からは正しく動作していて、 - 私たちの場合、Passenger/Rails)。誰かが頭を傷つけている場合に備えて、ここに記入してください。 –

答えて

6

エラーログには、通常、(もっと)具体的なエラーがあります。多くの場合、許可が拒否されるか、見つからないインタープリターにさえなります。

これは、ほとんどの場合、フォルトがあなたのスクリプトにあることを意味します。たとえば、perlスクリプトをアップロードしましたが、実行権限を与えられませんでしたか?またはおそらくLinux環境で破損していた場合は、スクリプトをWindowsに書き込んだ後、行末を変換せずにサーバにアップロードすると、このエラーが発生します。 Perlで

あなたは、あなたがそれには多くの理由があります

このエラーメッセージが表示されます

print "content-type: text/html\r\n\r\n"; 

を忘れてしまった場合。最初にエラーログを確認してから、さらに情報を提供してください。

デフォルトのエラーログは、多くの場合、/var/log/httpd/error_logまたは/var/log/apache2/error.logです。

上記のデフォルトのエラーログを見る理由は、仮想ホストに定義されているカスタムエラーログにエラーが必ず掲載されるとは限らないためです。

は、Linuxを想定し、必ずしも

+5

サーバErrorLogを確認しましたが、そこには何も見つかりません。 – wcolbert

+1

あなたは正しいです、それはPHPスクリプトの問題であることが判明しました。 PEARライブラリがインストールされていません。私は私のVPSにインストールし、すべてがうまくいきます。皆さんありがとう! – wcolbert

+163

"ログを確認してください"という回答は、 "なぜ私のログが空である"という回答になりますか? –

6

は、あなたのapacheのエラーログとは別のファイルであるかもしれないPHPのエラーログを確認してくださいperlのではありません。

phpinfo()に移動し、error_log属性を確認してください。 設定されていない場合。それを設定してください:https://stackoverflow.com/a/12835262/445131

ポストしようとしているもののpost_max_sizeが小さすぎるか、他の最大メモリ設定の値が小さすぎるかもしれません。

+0

質問は、「Apacheに内部500のエラーをエラーログに記録させるにはどうすればよいのですか?」*これはおそらくコメントであるはずです。 – jww

0

実行しているPHPのバージョンがコードベースと一致していることを確認してください。たとえば、あなたのローカル環境でphp 5.4が動作している可能性があります。また、php 5.3がインストールされている新しいマシンでコードをテストしているかもしれません。 array()に[]などの5.4構文を使用している場合は、上で説明した状況が発生します。

+0

質問は、「Apacheに内部500のエラーをエラーログに記録させるにはどうしたらいいですか?」*これはおそらくコメントであるはずです。 – jww

6

私はちょうどこれに遭遇しました。これは、私の.htaccessファイルのmod_authnz_ldapの誤設定によるものです。絶対に何もログに記録されていませんでしたが、私は500のエラーを受けていました。

+0

質問は、「Apacheに内部500エラーをエラーログに記録させるにはどうすればよいのですか?」*これはおそらくコメントでなければなりません。 – jww

93

500の内部サーバーエラーがあなたのApacheエラーログに記録されないのはなぜですか?

500内部サーバーエラーの原因となるエラーは、PHPモジュールから発生しています。デフォルトでは、PHPはこれらのエラーを記録しません。理由は、Webリクエストを物理的に可能な限り速くしたいという理由です。

Ubuntu 12.10には、PHP 5.3.10Apache/2.2.22の内部サーバーエラーログを有効にする手順が記載されています。

必ずPHPのロギングがオンにされていることを確認します。rootとしてファイル

[email protected]:~$ locate php.ini 
/etc/php5/apache2/php.ini 
  • 編集:

    sudo vi /etc/php5/apache2/php.ini 
    
  • php.iniファイルを探し

    1. php.iniでこの行を探します:

      display_errors = Off 
      
    2. 変更し、これに上記の行:ダウン

      display_errors = On 
      
    3. 下のファイルにあなたがこのわかります

      ;display_startup_errors 
      ; Default Value: Off 
      ; Development Value: On 
      ; Production Value: Off 
      
      ;error_reporting 
      ; Default Value: E_ALL & ~E_NOTICE 
      ; Development Value: E_ALL | E_STRICT 
      ; Production Value: E_ALL & ~E_DEPRECATED 
      
    4. をセミコロンはコメントで、それが意味行は有効になりません。これらの行を次のように変更してください。

      display_startup_errors = On 
      ; Default Value: Off 
      ; Development Value: On 
      ; Production Value: Off 
      
      error_reporting = E_ALL 
      ; Default Value: E_ALL & ~E_NOTICE 
      ; Development Value: E_ALL | E_STRICT 
      ; Production Value: E_ALL & ~E_DEPRECATED 
      

      これは、これらのエラーをすべてログに記録することです。警告、大きなパフォーマンスヒットが発生するので、ロギングには時間がかかり、時間がかかります。

    5. PHPを再起動するとApacheが変更を適用する必要があります。

    6. あなたは再び500内部サーバーエラーが発生し、ログを確認するために何をしたか実行します。

      vi /var/log/apache2/error.log 
      
    7. あなたは、最後にこのような何か500エラーが表示されるはずです。

      [Wed Dec 11 01:00:40 2013] [error] [client 192.168.11.11] PHP Fatal error: 
      Call to undefined function Foobar\\byob\\penguin\\alert() in /yourproject/ 
      your_src/symfony/Controller/FuckedUpController.php on line 249, referer: 
      https://nuclearreactor.com/abouttoblowup 
      
  • +24

    'display_errors'は**画面**にエラーを表示します。 'log_errors'は**ログファイル**にエラーを書き込みます。 – daVe

    +6

    これは、この質問の標準的な答えになるはずです。 – David

    +7

    @WanLiqunそれは情報のかなり良い部分ですが、それはPHPにのみ適用され、質問にも言及されていません。 –

    6

    内部サーバーエラーの情報がログファイルに表示されない場合は、おそらくresta Apacheサービスです。

    Apache 2.4(少なくともWindowsプラットフォーム)は、ログファイルのフラッシュを拒否する傾向があることがわかりました。代わりに、ログされたデータはかなり長い間メモリに残っています。パフォーマンスの観点からは良いアイデアだが、開発すると混乱することがある。

    +0

    これはLinuxの私にとって正解でした。オリジナルのerror.log(文字デバイスファイル)を削除してtouch 777 error.logに置き換えた後でも、Apacheは再起動するまでそれに書き込みません。 – chrishasbrouck

    0

    静的ファイルにアクセスしてみてください。これが動作していない場合は ルート "/"または "c:\"からファイルのディレクトリに移動し、 ".htaccess"ファイルが含まれているかどうかを確認してください。

    「c:\」に一度ファイルを残しましたが、これは最も奇妙な結果でした。

    +0

    質問:*「Apacheに内部500エラーをエラーログに記録させるにはどうすればよいですか」* – jww

    0

    私の場合は、httpd.confのErrorLogディレクティブでした。ちょうど私があきらめた後、ちょうど偶然それに気づいた発見を共有することにしました) ここで私は500エラーを見つける場所を知っています。

    +0

    答えに詳細を記入してください。 –

    +0

    私はMagento(CMS - Content Management System)をApache用に使用しています。 Magentoコアクラスを使用しているページにエラー500がありました。 エラーメッセージが表示される場所が見つかりませんでした。 ここにいくつかの答えによると、私はApacheのログで検索しようとしました /etc/httpd/logs/error_log。しかしそこには何もなかった。 後で、httpd.confの に、ログパスを定義する特定のWebホストの行があることがわかりました。

    関連する問題