PHPのIP制限でメンテナンスページを表示させる方法

Web開発
この記事は約4分で読めます。

こんにちは、@Manabu です。

Webサイトの運営者として、定期的なメンテナンス作業は必要不可欠です。

メンテナンスページを表示して作業を行うことで、ユーザーに対し通知を行うことができます。

以前は、AWSのWAFを使用してメンテナンスページを表示させる方法を紹介しました。

AWSのWAFでメンテナンス画面を表示!アクセス不可を簡単に対応
AWSのWAFを使用した、メンテナンス画面の表示方法について、手順付きで紹介しています。 簡単な設定方法でサーバーに影響なく、設定を行うことができますので、ぜひ参考にして下さい。

今回は、PHPでできるメンテナンスページを表示させる方法について紹介します。

簡単ですので、ぜひ参考にしてください。

期待する動作

今回の実装で期待する動作は以下になります。

  • 特定のIPのみアクセスを許可
  • 許可されていないIPにはメンテナンスページを表示
  • リバースプロキシ環境でも適切にIPを表示

実装方法

以下の手順にしたがって実装することで、メンテナンスページを表示させることができます。

許可するIPを確認

まずは、メンテナンスページを表示せず、アクセスを許可するIPを確認します。

自分のIPを確認するためには、以下のサイトなどで確認しましょう。

自分のグローバルIPアドレスを確認
自分のIPアドレス、グローバルIPアドレスやISPを確認しよう。種類や仕組みについても解説。

メンテナンスページを作成

表示させるメンテナンスページを作成します。

作成場所は、ドキュメントルートのディレクトリに配置します。

今回の名前はmaintenance.htmlとします。以下簡単な例になります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>メンテナンス中</title>
<style>
body { text-align: center; font-family: Arial, sans-serif; padding: 50px; }
h1 { color: red; }
</style>
</head>
<body>
<h1>サイトは現在メンテナンス中です</h1>
<p>ご迷惑をおかけしますが、しばらくお待ちください。</p>
</body>
</html>

IP制限を行う処理を追加

以下のコードを、ルートディレクトリにあるindex.phpの先頭、または共有のconfig.phpに記述してください。

<?php
// 許可するIPアドレス一覧(複数設定可)
$allowed_ips = [
    "1.0.0.1",
    "127.0.0.1"
];

// クライアントのIPを取得(リバースプロキシ対応)
$nowip = $_SERVER['REMOTE_ADDR'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $nowip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

// 許可されていないIPの場合はメンテナンスページへリダイレクト
if (!in_array($nowip, $allowed_ips)) {
    header("HTTP/1.1 503 Service Unavailable");
    header("Location: maintenance.html");
    exit;
}
?>

この処理を追加することで、許可したIPは処理を通り、許可されていないIPは503エラーで作成したメンテナンスページにリダイレクトされるようになります。

まとめ

自作の処理を追加しましたが、WAFやWebサーバー側でも設定できますし、フレームワークやプラグインなど対応方法はいろいろ考えられます。

今回は、その中でもっとも追加の知識がなくても対応できる内容になっていると思いますので、ぜひ参考にしてください。