記事内容
今回は
「CloudFlareの526エラーを修正したい」
「シンフリーサーバーでCloudFlareを使いたい」
「シンフリーサーバーで"無料独自SSL"を更新できない場合」
「サーバーのダウン通知を受け取りたい」
の4点を解説します。
CloudFlareの526エラーを修正したい
サイトにアクセスしたときにたまにあるこのエラー
CloudFlareとサーバーの通信がうまくいっていないエラーです。
- サーバーは電源が入っているか(pingでIPアドレス入れてなんか帰ってくる?)
- ドメインは割り当てられているか
- SSLは期限を過ぎていないか
を確認してください。
修理方法は後述。
シンフリーサーバーでCloudFlareを使いたい
シンフリーサーバー(旧:Xfree)は無料で使えちゃう便利なサーバーです。
ほかのレンタルサーバ(または自作)から移行しないと申し込めないのですが、GithubPagesを使えば突破できます。
さて、シンフリーサーバーは正式にはCloudFlareをサポートしていませんが、実は普通に行けちゃいます。
CloudFlareのアカウント作って、DNSをうんぬんしたら接続完了!
とはいえ、そういうことをするとシンフリーサーバーの"無料独自SSL"が更新できなくて526エラーがやがて発生します。
今回はその事象の解決策を忘備録にするために、4本立ての記事なんです。
シンフリーサーバーで"無料独自SSL"を更新できない場合
シンフリーサーバー(とかほかにもいろいろ?)は独自にSSLを準備してくれるのですが、そういうのは大体CloudFlareを入れると自動更新に失敗します。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【シンフリーサーバー】■重要■ [無料独自SSL]SSLサーバー証明書
(abellate.net) 更新未完了のお知らせ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
シンアカウントID : hogehoge
メールアドレス : hogehoge@gmail.com
平素は当サービスをご利用いただき誠にありがとうございます。
シン/wpX カスタマーサポートでございます。
サーバーID「hogehoge」で利用中の下記SSLサーバー証明書に関し、
当サポートで有効期限の延長をするための更新作業を行いましたが、
正常に完了することができませんでした。
────────────────────
■SSL更新情報
【SSLブランド】 : Let's Encrypt
【独自IPアドレス】: -
【サーバーID】 : hogehoge
【コモンネーム】 : www.abellate.net
【サイトURL】 : https://abellate.net/
【有効期限日】 : hogehoge年hoge月huga日
────────────────────
みたいなのがメールで来て、ほっとくと期限が切れて526エラーです。
これって、CloudflareにDNSを割り当てちゃったので発生した問題なので、一時的にCFを外して手動で更新すれば治ります。
まずCloudFlareに入って、開発モードを有効にします。
これによりキャッシュを考えなくてよくなります。
DNS\DNSレコード のページを開き、オレンジの雲がある「プロキシ済み」のやつ(今回は3つ)を編集し、一時的にプロキシを無効化します。
プロキシステータスのトグルを無効にして、一時的にCloudFlareを無効にします。
レコード消してもいいですけど、消した場合あとでめんどくさくなります。
あとはレンタルサーバーの指示に従って証明書を更新しましょう。
エラーが出た場合数分待つといいです。
発行されたら、
- サイトにアクセスできることを確認して
- シークレットモードのChrome(キャッシュがない)でアクセスできることを確認して
- 友達 or curlに頼んで別環境でもアクセスできることを確認して
から、CloudFlareの設定を戻しましょう。
開発モードは数日で自動で外れるので無視していいですが、DNS(トグルのほう)は戻さないとCloudFlareのご加護がないままです。
サーバーのダウン通知を受け取りたい
リアルタイム通知は私にはできませんが、ダウンしたのをPCログイン時に知るのはできます。
具体的には、実際にアクセスしてみてHTTPステータスで確認します。
サンプルコードはPythonと.batで用意しました。
"shell:startup" フォルダに投げ込めばPCが起動するごとに確認できますよ。
(Pythonスクリプトはそのまま入れてもダメなので、.batからstartしてください。)
Python版
- 3.13で確認
- requestsを使用します。ない場合pipしてください
- 問題ない場合は何も残さず終了します
- エラーがあった場合は集計後にWindowsのダイアログでエラーなURLのリストを表示します
import requests
import ctypes
import sys
URLS = [
#検証対象を入れる
"https://abellate.net",
"https://anepad.abellate.net",
"https://abatbeliever.net",
"https://hspland.net",
"https://gangangansoku.jp"
]
errors = []
for url in URLS:
try:
response = requests.get(url, timeout=10)
if response.status_code != 200:
errors.append(f" {url} → HTTP {response.status_code}")
except requests.exceptions.SSLError:
errors.append(f"[FAIL] {url} → SSLエラー\n")
except requests.exceptions.RequestException as e:
errors.append(f"[FAIL] {url} → 接続失敗\n")
if errors:
msg = "\n".join(errors)
ctypes.windll.user32.MessageBoxW(0, msg, "One or more URLs are dead", 0x30)
# 0x30 = MB_ICONWARNING
sys.exit(1)
else:
sys.exit(0)
start /min python.exe C:\~~~hogehoge.py
.bat版
- Windows11で確認。
- curlを使用します。ない場合curlをダウンロードしてSystem32に投げてください
- 問題ない場合は終わり次第終了します(callした場合セッションは残ります)
- 問題ある場合、エラーのURLを列挙しpause>nulで停止します。なんかキー押すと閉じちゃうので注意!
@echo off
setlocal enabledelayedexpansion
rem 下記にURLを空白区切りで入力。このコメントアウトは実行時に消すかANSIにしてね
set URLS=https://abellate.net https://anepad.abellate.net https://abatbeliever.net https://hspland.net https://gangangansoku.jp
set ERROR=0
echo WebSite Check
for %%U in (%URLS%) do (
curl -s -I %%U >nul
if errorlevel 1 (
echo [FAIL]: %%U
set ERROR=1
) else (
echo [PASS]: %%U
)
)
if "!ERROR!"=="1" (
echo.
echo One or more URLs are dead
pause >nul
) else (
echo.
echo System All Green
exit /b 0
)
さて、
setlocal enabledelayedexpansion
は魔境なので使いたくないけど、なんか動いてるのでいいでしょう。