WebサイトでHTTP 500エラーが発生したとき、原因の切り分けから解決まで体系的に解説。.htaccess、パーミッション、PHP設定など主要原因をすべてカバー。
こんな悩みありませんか?
「突然サイトにアクセスできなくなった」「真っ白な画面に500 Internal Server Errorと表示される」「お客様からサイトが見れないと連絡があった」
このような経験をお持ちのWeb担当者の方は多いのではないでしょうか。HTTP 500エラーは最も厄介なエラーの一つで、原因の特定が困難なため多くの方が頭を抱えています。
神奈川でWeb制作を20年以上続けてきた弊社では、これまで数百件のHTTP 500エラーに対応してきました。そこで今回は、実際の現場で培ったノウハウを基に、500エラーの原因特定から解決まで体系的にご説明します。
HTTP 500エラーとは?原因の全体像を把握しよう
HTTP 500 Internal Server Errorは「サーバー内部エラー」を意味し、Webサーバーが何らかの理由でリクエストを正常に処理できない状態を示しています。
なぜ500エラーは厄介なのか
通常のHTTPエラー(404 Not Found等)と違い、500エラーは具体的な原因が表示されません。これはセキュリティ上の理由で、サーバーの詳細な情報を外部に晒すことを防ぐためです。
実際のクライアント事例では、ECサイトで500エラーが発生し、1時間で約50万円の売上機会を逃したケースもありました。このような事態を防ぐため、迅速な原因特定と解決が必要です。
主要な原因パターン
弊社の経験では、500エラーの原因は以下の順序で発生頻度が高くなっています:
- .htaccessファイルの記述エラー(35%)
- ファイル・ディレクトリのパーミッション設定(25%)
- PHP設定・メモリ不足(20%)
- プラグイン・スクリプトのエラー(12%)
- サーバー設定の問題(8%)
実践的な原因特定手順
Step 1: エラーログの確認
まず最初に行うべきはエラーログの確認です。これが最も確実で効率的な方法です。
Pleskの場合
# Pleskでのエラーログ確認方法
1. Pleskにログイン
2. ドメイン選択
3. 「ログ」→「エラーログ」を確認
cPanelの場合
# cPanelでのエラーログ確認
1. cPanelにログイン
2. 「メトリクス」→「エラー」を選択
3. 最新のエラーを確認
SSHでの直接確認
# Apacheのエラーログ確認
tail -f /var/log/apache2/error.log
# 特定ドメインのエラーログ(Plesk環境)
tail -f /var/www/vhosts/yourdomain.com/logs/error_log
あるクライアントでは、エラーログを確認することで「.htaccessの3行目でRewriteRuleの記述にエラーがある」ことが即座に判明し、5分で解決できました。
Step 2: 段階的な切り分け
エラーログが確認できない場合は、以下の順序で原因を切り分けます。
2-1. .htaccessファイルのチェック
.htaccessは最も頻繁に500エラーの原因となるファイルです。
# .htaccessファイルを一時的にリネーム
mv .htaccess .htaccess_backup
サイトが正常に表示されれば、.htaccessが原因です。
よくある.htaccessエラーパターン:
# NG例: RewriteEngineの記述ミス
RewriteEngin On # 「e」が抜けている
# OK例
RewriteEngine On
# NG例: 不正なRewriteRule
RewriteRule ^(.*)$ index.php/$1 [QSA,L] # 末尾のスラッシュが問題
# OK例
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
2-2. ファイルパーミッションの確認
パーミッション設定は2番目に多い原因です。特にFTPでファイルをアップロードした際に発生しがちです。
# 適切なパーミッション設定
find /path/to/website -type f -exec chmod 644 {} \; # ファイル
find /path/to/website -type d -exec chmod 755 {} \; # ディレクトリ
# CGIスクリプトの場合
chmod 755 script.cgi
危険なパーミッション例:
# 絶対にやってはいけない設定
chmod 777 * # セキュリティリスクが高い
# ファイルに実行権限を付与(通常不要)
chmod 755 index.html # HTMLファイルに実行権限は不要
Step 3: PHP関連の問題をチェック
3-1. PHPエラーの表示設定
PHPエラーが原因の場合、以下の設定で詳細を確認できます。
<?php
// デバッグ用の設定(本番では使用禁止)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// この下に問題のあるコードを配置してテスト
?>
3-2. メモリ不足の解決
PHPメモリ不足も頻繁に発生する問題です。
# .htaccessでメモリ制限を変更
php_value memory_limit 512M
# php.iniで設定する場合
memory_limit = 512M
実際の事例では、WordPressサイトでプラグインを大量にインストールしたことでメモリ不足が発生。メモリ制限を128MBから512MBに変更することで解決しました。
3-3. PHPバージョン互換性
古いスクリプトを新しいPHPバージョンで実行すると500エラーが発生することがあります。
// PHP 7.4で廃止された関数の例
// NG: PHP 7.4以降では使用不可
split('/', $path);
// OK: 代替関数を使用
explode('/', $path);
// PHP 8.0以降での注意点
// NG: 必須パラメータの前にオプションパラメータ
function test($optional = null, $required) {}
// OK: オプションパラメータは最後に
function test($required, $optional = null) {}
環境別の具体的な解決手順
Plesk + Apache環境での解決法
Plesk環境では以下の手順で体系的に原因を特定できます。
1. Plesk管理画面にログイン
2. 該当ドメインを選択
3. 「ファイル」→「ファイルマネージャー」
4. httpdocsフォルダを確認
5. .htaccessファイルの存在確認
6. 「ログ」でエラー詳細を確認
WordPress特有の500エラー対処法
WordPressでは以下の順序でチェックします:
// wp-config.phpにデバッグ設定を追加
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
// プラグインの一時無効化
// wp-content/pluginsフォルダ名を変更
mv plugins plugins_disabled
WordPressの500エラー解決手順:
- プラグインを全て無効化
- テーマをデフォルトに変更
- .htaccessを初期化
- wp-config.phpの設定確認
あるクライアントでは、セキュリティプラグインが原因で500エラーが発生。プラグインを一つずつ有効化することで原因を特定し、設定を調整して解決しました。
よくある失敗パターンと対処法
失敗パターン1: パニックになってファイルを削除
よくある失敗: エラーが発生すると慌ててファイルを削除してしまい、かえって状況を悪化させる。
正しい対処:
# 必ずバックアップを取ってから作業
cp -r website_folder website_backup_$(date +%Y%m%d)
# ファイルは削除せず、リネームで無効化
mv .htaccess .htaccess_backup
mv problematic_plugin.php problematic_plugin.php.disabled
失敗パターン2: 複数の原因を同時に修正
よくある失敗: 複数の設定を同時に変更し、何が効果的だったかわからなくなる。
正しい対処:
# 一つずつ段階的に修正
1. .htaccessをチェック → テスト
2. パーミッションをチェック → テスト
3. PHP設定をチェック → テスト
失敗パターン3: chmod 777の乱用
危険な対処:
# 絶対にやってはいけない
chmod 777 -R *
正しいパーミッション設定:
# セキュアな設定
find . -type f -name "*.php" -exec chmod 644 {} \;
find . -type f -name "*.html" -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
# 設定ファイルはより厳格に
chmod 600 wp-config.php
chmod 600 .env
高度なトラブルシューティング
サーバーリソース監視
# CPU・メモリ使用率確認
top
# ディスク使用量確認
df -h
# Apache プロセス確認
ps aux | grep apache
# エラーログをリアルタイム監視
tail -f /var/log/apache2/error.log | grep "500"
.htaccessの段階的テスト
# 最小構成の.htaccessから開始
RewriteEngine On
# 動作確認後、段階的に追加
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 最後に複雑なルールを追加
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
予防策と監視体制の構築
定期的な健全性チェック
#!/bin/bash
# サイト監視スクリプト例
URL="https://yoursite.com"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" $URL)
if [ $STATUS -eq 500 ]; then
echo "500エラー検出: $(date)" >> /var/log/site_monitor.log
# メール通知やSlack通知を実装
fi
バックアップ戦略
# 自動バックアップスクリプト
#!/bin/bash
BACKUP_DIR="/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# ファイルバックアップ
tar -czf $BACKUP_DIR/files.tar.gz /var/www/html/
# データベースバックアップ
mysqldump -u username -p database_name > $BACKUP_DIR/database.sql
まとめと次のステップ
HTTP 500エラーは確かに厄介ですが、体系的なアプローチにより必ず解決できます。弊社の経験では、適切な手順に従うことで95%以上のケースで1時間以内に解決できています。
重要なのは、パニックにならず段階的に原因を切り分けることです。エラーログの確認から始まり、.htaccess、パーミッション、PHP設定の順で確認することで、効率的に解決できます。
今すぐ実行すべきチェックリスト
より高度な対応が必要な場合
- サーバー設定レベルの問題
- 複雑なアプリケーションエラー
- パフォーマンスチューニング
- セキュリティ関連の設定
これらの問題でお困りの場合は、専門的な知識と経験が必要です。弊社では20年以上のWeb開発・運用実績を基に、迅速かつ確実な解決をサポートいたします。
次のアクション:
- まずは上記のチェックリストを実行
- 解決しない場合は専門家への相談を検討
- 予防策として監視・バックアップ体制を整備
500エラーでお困りの際は、まずは落ち着いて段階的なアプローチを試してみてください。それでも解決しない場合は、お気軽にご相談いただければと思います。
関連するエラー解決記事
このサイトでは他にもサーバーエラーの解決記事を公開しています:
- 【解決】HTTP 421 Misdirected Requestエラーの原因と直し方 - SSL証明書やドメイン設定が原因のエラー
- nginx 502 Bad Gatewayエラーの原因と解決方法 - PHP-FPMやプロキシ設定の問題
- SSL証明書エラーの完全対処ガイド - 証明書の期限切れや設定ミス
- WordPress白画面(WSOD)の復旧方法 - 真っ白になった時の対処法
- Laravel SQLSTATEエラー解決ガイド - データベース接続エラー
お困りですか? サーバーエラーでお困りの場合は、無料相談をご利用ください。20年の実績で迅速に解決します。