アプリで特定のアドレスに HTTP POST を送信しようとすると、500 内部サーバー エラーが発生します。仮想ホスト ファイルで指定されたカスタム ログ ディレクトリのサーバー ログを調べましたが、そこにエラーが表示されないため、これをデバッグするのが面倒でした。
Apache が内部 500 エラーをエラー ログに記録するようにするにはどうすればよいですか?
アプリで特定のアドレスに HTTP POST を送信しようとすると、500 内部サーバー エラーが発生します。仮想ホスト ファイルで指定されたカスタム ログ ディレクトリのサーバー ログを調べましたが、そこにエラーが表示されないため、これをデバッグするのが面倒でした。
Apache が内部 500 エラーをエラー ログに記録するようにするにはどうすればよいですか?
Apache エラー ログとは別のファイルである可能性がある php エラー ログを確認します。
phpinfo()
error_log 属性にアクセスして確認します。設定されていない場合。設定してください: https://stackoverflow.com/a/12835262/445131
投稿しようとしているものに対して post_max_size が小さすぎるか、他の最大メモリ設定のいずれかが低すぎる可能性があります。
これに遭遇したのは、.htaccess ファイルの mod_authnz_ldap の設定ミスが原因でした。まったく何もログに記録されていませんでしたが、500 エラーが発生し続けました。
この特定の問題が発生した場合は、次のように mod_authnz_ldap のログ レベルを変更できます。
LogLevel warn authnz_ldap_module:debug
これは、mod_authnz_ldap に対してデバッグのログ レベルを使用しますが、他のすべてに対して警告します ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel )。
内部サーバー エラー情報がログ ファイルに表示されない場合は、おそらく Apache サービスを再起動する必要があります。
Apache 2.4 (少なくとも Windows プラットフォームでは) は、ログ ファイルのフラッシュを頑固に拒否する傾向があることがわかりました。パフォーマンスの観点からは良い考えですが、開発時に混乱する可能性があります。
コードのどこかでエラー報告を無効にしているかどうかを確認してください。
コード内に無効にした場所があったため、その後にデバッグ コードを追加しました。
require_once("inc/req.php"); <-- Error reporting is disabled here
// overwrite it
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
注意:元の投稿者は特に PHP について質問していませんでした。すべてのphp中心の回答は、実際の質問とは関係のない大きな仮定をしています。
スクリプトのエラー ログとは対照的に、デフォルトのエラー ログには通常、(より) 具体的なエラーがあります。多くの場合、アクセス許可が拒否されたり、インタープリターが見つからなかったりします。
これは、ほとんどの場合、スクリプトに問題があることを意味します。たとえば、perl スクリプトをアップロードしましたが、実行権限を与えていませんか? または、Windows でスクリプトを作成し、行末を変換せずにサーバーにアップロードすると、Linux 環境で破損した可能性があり、このエラーが発生します。
忘れたらperlで
print "content-type: text/html\r\n\r\n";
このエラーが発生します
それには多くの理由があります。そのため、まずエラー ログを確認してから、さらに詳しい情報を提供してください。
多くの場合、デフォルトのエラー ログは/var/log/httpd/error_log
またはにあり/var/log/apache2/error.log
ます。
デフォルトのエラー ログ (上記のとおり) を見る理由は、仮想ホストで定義されているように、エラーが常にカスタム エラー ログに記録されるとは限らないためです。
Linux を想定しており、必ずしも perl ではありません
Apache 構成ファイルに追加HttpProtocolOptions Unsafe
し、Apache サーバーを再起動します。エラーの詳細を表示します。
静的ファイルにアクセスしてみてください。これが機能しない場合は、ルート「/」または「c:\」からファイルのディレクトリまでのすべてのディレクトリに移動し、「.htaccess」ファイルが含まれているかどうかを確認します。
「c:\」にファイルを残したことがありますが、非常に奇妙な結果になりました。