Skip to content

Healthcheck

Wdrożenie

Endpoint /health służy do monitorowania rzeczywistej dostępności WordPressa przez narzędzia typu Uptime Kuma.

W przeciwieństwie do sprawdzania zwykłej podstrony, endpoint:

  • nie jest buforowany przez mechanizmy cache,
  • nie renderuje szablonów ani treści WordPressa,
  • sprawdza połączenie z bazą danych,
  • zwraca jednoznaczny kod HTTP (200 lub 500).

Tworzenie pliku pomocniczego

Tworzymy i edytujemy plik pomocniczy healthcheck.php w folderze /inc/ motywu potomnego:

healthcheck.php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
 * Adds a lightweight /health endpoint for uptime monitoring.
 * Registers a rewrite rule (/health -> index.php?healthcheck=1) and serves a response early in the request:
 * returns HTTP 200 + "OK" when WordPress can reach the DB, otherwise HTTP 500 + "No DB connection".
 * Sends nocache headers to avoid CDN/page-cache masking real origin issues.
 */

declare(strict_types=1);

if (!defined('ABSPATH')) {
    exit;
}

/** Register the query var used by /health endpoint. */
function fulcro_healthcheck_register_query_var(array $vars): array
{
    $vars[] = 'healthcheck';
    return $vars;
}

/** Serve /health when healthcheck=1 is present; 200 if DB OK, otherwise 500. */
function fulcro_healthcheck_maybe_serve(\WP $wp): void
{
    if (($wp->query_vars['healthcheck'] ?? null) !== '1') {
        return;
    }

    global $wpdb;

    if (!($wpdb instanceof \wpdb) || !$wpdb->check_connection(false)) {
        status_header(500);
        nocache_headers();
        echo 'No DB connection';
        exit;
    }

    status_header(200);
    nocache_headers();
    echo 'OK';
    exit;
}

/** Add rewrite rule for /health -> index.php?healthcheck=1 */
function fulcro_healthcheck_add_rewrite_rule(): void
{
    add_rewrite_rule('^health/?$', 'index.php?healthcheck=1', 'top');
}

/** Attach hooks required for /health. */
function fulcro_healthcheck_init(): void
{
    add_filter('query_vars', 'fulcro_healthcheck_register_query_var');
    add_action('parse_request', 'fulcro_healthcheck_maybe_serve', 10, 1);
    add_action('init', 'fulcro_healthcheck_add_rewrite_rule');
}

/** Flush rewrite rules once on theme switch. */
function fulcro_healthcheck_activate_rewrite(): void
{
    fulcro_healthcheck_add_rewrite_rule();
    flush_rewrite_rules(false);
}
Zapisujemy plik i wychodzimy z edytora.


Dołączanie pliku pomocniczego do functions.php

Dołączamy plik pomocniczy i zarejestruj hooki edytując functions.php motywu potomnego.

functions.php
1
2
3
4
5
6
<?php
/* Healthcheck */ 
require_once get_stylesheet_directory() . '/inc/healthcheck.php';

add_action('after_setup_theme', 'fulcro_healthcheck_init');
add_action('after_switch_theme', 'fulcro_healthcheck_activate_rewrite');

Zapisujemy plik i wychodzimy z edytora.


Odświeżenie bezpośrednich odnośników (rewrite)

Po dodaniu pliku i zapisaniu zmian w functions.php należy jednorazowo odświeżyć reguły przepisywania adresów URL w WordPressie.

  1. Logujemy się do panelu administracyjnego WordPress, a następnie:
  2. Przechodzimy do Ustawienia → Bezpośrednie odnośniki.
  3. Nie zmieniając żadnych ustawień, klikamy Zapisz zmiany.

Wykluczenie endpointu /health w WP Super Cache

Aby monitoring nie był serwowany z pamięci podręcznej, dodajemy /health do listy odrzucanych adresów URL w WP Super Cache.

  1. Logujemy się do panelu administracyjnego WordPress, a następnie:
  2. Przechodzimy do Ustawienia → WP Super Cache.
  3. Otwieramy zakładkę Zaawansowane (Advanced).
  4. W sekcji Rejected URL Strings dodajemy:

    /health
    
  5. Zapisujemy zmiany.

  6. Przechodzimy do zakładki Zawartość (Contents) i klikamy Delete Cache (lub Delete Cache and Expired Cache), aby wyczyścić istniejący cache.

Testowanie

Po odświeżeniu bezpośrednich odnośników i wykluczeniu z cache testujemy endpoint w przeglądarce.

https://domena.pl/health