web-dev-qa-db-ja.com

内部サーバーエラー;デバッグの有効化は追加情報を提供しません

Apache 2.4.3を実行しているCentOS 7.2でMediawiki 1.25.1を使用しています。 Apache 2.4.6を実行しているCentOS 7.2でMediawiki 1.26.4を使用しています。ページを編集して送信した後、Internal Server Errorが発生しています。

enter image description here

/var/log/httpd/error_logには追加情報はありません。 Manual:How to debug に従って、以下をLocalSettingsに追加し、Apacheを再起動しました。

$ Sudo tail -7 LocalSettings.php
# Added by JW for debugging (JUN 2016). Keep commented unless needed.
$wgShowExceptionDetails=true;
$wgShowSQLErrors=true;
error_reporting( -1 );
ini_set( 'display_errors', 1 );

?>

$wgShowExceptionDetailserror_reportingおよび友達を追加しても、追加情報は提供されません。 error_logはクリーン、access_logはクリーンです。 error_log = php_errors.logを有効にしましたが、サーバーはphp_errors.logを生成しません。他にどこを見ればいいのかわかりません。

mysqlcheck my_wiki --auto-repair --user=... --password=...を実行しましたが、エラーは報告されませんでした。 apachectl configtestはすぐにSyntax OKを返します。ただし、問題は解決しません。

また、この内部サーバーエラーを喜びなく修正することを期待して、MediaWiki 1.26.4(1.25.1から)へのアップグレードも実行しました。それはまだ残っており、私はまだそれに関する追加情報を得ることができません。

質問:どのように1つ本当にデバッグ情報を有効にしますか?このサーバーを苦しめている問題に関する詳細情報を収集するにはどうすればよいですか?

(質問への対応として実行可能な項目を提供してください。また、動作しない可能性のある他のページで試してみるように指示するオフサイトリンクを提供しないでください。質問され、質問されなかった他の質問ではありません。)


MediaWiki 1.26にアップグレードした後のerror_logからの最新「役に立たないエラーメッセージ」を次に示します。 Wikiページを更新する要求が送信されたときの/var/log/httpd/error_logの末尾から。

...
[Fri Oct 28 21:05:04.456126 2016] [suexec:notice] [pid 1053] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Oct 28 21:05:04.457260 2016] [:notice] [pid 1053] ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/) configured.
[Fri Oct 28 21:05:04.457283 2016] [:notice] [pid 1053] ModSecurity: APR compiled version="1.4.8"; loaded version="1.4.8"
[Fri Oct 28 21:05:04.457290 2016] [:notice] [pid 1053] ModSecurity: PCRE compiled version="8.32 "; loaded version="8.32 2012-11-30"
[Fri Oct 28 21:05:04.457295 2016] [:notice] [pid 1053] ModSecurity: LUA compiled version="Lua 5.1"
[Fri Oct 28 21:05:04.457299 2016] [:notice] [pid 1053] ModSecurity: LIBXML compiled version="2.9.1"
[Fri Oct 28 21:05:04.495066 2016] [auth_digest:notice] [pid 1053] AH01757: generating secret for digest authentication ...
[Fri Oct 28 21:05:04.632965 2016] [mpm_prefork:notice] [pid 1053] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips configured -- resuming normal operations
[Fri Oct 28 21:05:04.632994 2016] [core:notice] [pid 1053] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

数人の人々がスタートアップメッセージについてコメントしています。 Apacheが常にそれを行っていたので、私はそれが異常であることを知りませんでした。私たちは最近、それに対処するために次の変更を行いました(ただし、「情報なし」の問題は解決しませんでした)。

# diff /etc/httpd/conf.d/mpm_prefork.conf.bu /etc/httpd/conf.d/mpm_prefork.conf
9,13c9,13
< StartServers       1
< MinSpareServers    1
< MaxSpareServers    5
< ServerLimit       10
< MaxClients        10
---
> StartServers       4
> MinSpareServers    4
> MaxSpareServers    8
> ServerLimit       32
> MaxClients        32

私たちはプロの管理者ではないので、問題を解決するのに十分かどうかはわかりません。私たちは、ユーザーを支援するためにWebサーバーとWikiを実行するフリーでオープンなソフトウェア開発者の集まりです。


これが "maximum brevity"/etc/php.iniです:

# cat /etc/php.ini | egrep -v '(^;|^\[)' | sed '/^$/d'
engine = On
short_open_tag = Off
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
cli_server.color = On
date.timezone = "UTC"
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
sql.safe_mode = Off
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_Host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_Host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
bcmath.scale = 0
session.save_handler = files
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
tidy.clean_output = Off
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
ldap.max_links = -1
2
jww

問題を診断する方法を見つけたと思います。 500サーバーのクラッシュをエラーと見なし、構成ファイルのerror_logにエラーを記録するように指定したため、この間ずっとエラーログに注目していました。

必死になって、*「内部サーバーエラー」のファイルシステム全体をgrepしました。見よ、mod_securityは構成設定を尊重していません:

# grep -IR 'Internal Server Error' /var/log
...
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
/var/log/httpd/modsec_audit.log:HTTP/1.1 500 Internal Server Error
...

/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161024:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161016:HTTP/1.0 500 Internal Server Error
/var/log/httpd/modsec_audit.log-20161016:HTTP/1.0 500 Internal Server Error     
...

<no error_log entries>

mod_security独自のファイルへのロギングで問題ありません。私は例外として、php.iniを使用して指示した場所にログを記録しなかったこと、および何ヶ月もの人時間とトラブルシューティングを無駄にしたことを例外とします。彼らがしなければならないことは、時折メッセージをerror_logに書くことであり、これは数ヶ月前に修正されていたでしょう。

0
jww

このタイプのエラーは、.htaccessファイルの設定ミスが原因です。 phpはそれとは何の関係もありません。いくつかの便利な診断コマンドでApacheをデバッグする必要があります

apachectl configtest

役立つヘルプはこちら https://serverfault.com/questions/232145/command-to-check-validity-of-Apache-server-config-files

2
Vikas Avnish

PHP Parse error: syntax error, unexpected 'error_reporting'...

前の行の最後にセミコロン(;)がありません。つまり:

$wgShowExceptionDetails=true;

「内部サーバーエラー」(コード:500)は非常に一般的な(すべてをキャッチ)エラーです。そのため、詳細についてはサーバーのerror_logが必要です。 Apache Webサーバーを使用している場合、ディレクトリごとのApache構成ファイル(.htaccessファイルなど)の構文エラーが原因であることがよくあります。必要なサーバーモジュールがインストールされていない場合も、構文エラーが発生する可能性があります(ディレクティブを解釈できないため)。

致命的なエラーが発生し、error_reporting/display_errorsが抑制されている場合、PHPは500エラーもトリガーします。

2
MrWhite

14:20に内部サーバーエラーが発生したと言いますが、これはログ抽出に表示されません(おそらく、アクセスログにも500応答が表示されませんでした)。これにより、子プロセスがクラッシュしたと思うようになります-デフォルトのcentosビルドでは、コアがダンプされるはずです。

この場合、ApacheまたはPHPビルドに問題があります。 PHPで記述されたコードは、このようなクラッシュを引き起こすことはできません(バイナリコードをトリガーするだけでクラッシュします)。 MediaWikiをアップグレードしても、このようなシナリオでは役に立ちません。 gdbのコアファイルを見ることができますが、実際の最初のステップは、PHPとApacheの両方が最新のパッチを適用していることを確認することです(ここで質問するときに両方のバージョンを含めます)。

ログファイルでmaxrequestworkerに2回アクセスしているのを見ると、やや不安です。 -DFOREGROUNDを実行する理由はありますか?

1
symcbean