Joustava huoltotilasivu
Paras tapa ohjata kaikki liikenne väliaikaisesti yhdelle staattiselle sivulle (esimerkiksi virheilmoituksen tai huoltoviestin näyttämiseksi), on lisäämällä tiedostoon /data/wordpress/nginx/custom.conf seuraavanlainen rivi:
rewrite ^(.*)$ /maintenance.html break;
Uudelleenkirjoituksen kohde voi olla mikä tahansa URL-osoite, ja vierailijoille näytettävä väliaikainen näkymä voi sijaita myös täysin eri palvelimella.
WordPress-ytimen huoltotila moduuli
WordPressin sisäänrakennettuja maintenance.php ja .maintenance -tiedostoja voidaan hyödyntää Seravon ympäristössä kuten missä tahansa muuallakin. Lisätietoja aiheesta WordPressin kehittäjä dokumentaatiossa.
Pelkistetty staattinen huoltotilasivu
Jos index.html -tiedosto sijoitetaan /data/wordress/htdocs/ -kansioon, se ohittaa olemassa olevan index.php -tiedoston, joka normaalisti lataa WordPressin. Staattinen tiedosto toimii aina, vaikka PHP jostain syystä olisi rikki. Staattinen sivu voi olla hyödyllinen esim. DDOS-hyökkäyksen aikana, koska staattista sisältöä voidaan tarjoilla paljon nopeammin kuin PHP:llä luotua sisältöä.
Mukautettu tietokantayhteysvirhesivu
Jos WordPress ei pysty muodostamaan yhteyttä tietokantaan, näytetään PHP-tiedosto /data/wordpress/htdocs/wp-content/db-error.php. Tämä tiedosto voidaan mukauttaa näyttämään mitä tahansa staattista tai dynaamista sisältöä oletuspohjan sijaan.
Mukautetut PHP-fataalivirhe- ja jäsennysvirhesivut
Yleensä useimmat PHP-virheet tulisi käsitellä PHP:llä. WordPress hoitaa tämän melko hyvin, mutta sitä voidaan laajentaa käyttämällä mukautettua sulkemiskäsittelijää (eng. shutdown handler) PHP-fataalivirheiden ja PHP-jäsennysvirheiden (eng. parse error) havaitsemiseksi. Nämä saavat yleensä PHP:n lähettämään HTTP-koodin 500 ja tyhjän sivun. Tyhjä sivu on kävijöille hyödytön, koska selain näyttää joko tyhjää tai yleisen virhesivun riippuen siitä, mikä on sisäänrakennettu selaimeen.
Seuraava koodiesimerkki näyttää, kuinka index.php -tiedostoa voidaan muokata näyttämään mukautettu staattinen 500.html -tiedosto PHP-fataalivirheiden tapahtuessa tyhjän vastauksen sijaan. Tätä voidaan hyödyntää esimerkiksi sivukartan, yhteystietojen, huoltotiedotteen tai muun sopivan sisällön näyttämiseen.
<?php
/*
* WordPress includes code for most error handling
* apart from parse errors and fatal errors.
* With this function a custom error message will be
* shown when those errors are catched.
*
* Normally PHP would emit HTTP code 500 with no
* payload on fatal errors. This function adds
* a customized payload to inform users about whatever.
*/
function customErrorHandlerAtShutdown() {
$error = error_get_last();
if ( $error ) {
// Error constants listed at
// http://php.net/manual/en/errorfunc.constants.php
switch ( $error['type'] ) {
case E_ERROR: // PHP Fatal error
case E_PARSE: // PHP Parse error
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
include '500.html';
break;
}
}
}
register_shutdown_function('customErrorHandlerAtShutdown');
// WordPress view bootstrapper
define('WP_USE_THEMES', true);
require(dirname( __FILE__ ) . '/wordpress/wp-blog-header.php');
Tämä koodi varmistaa, että virhesivua ei välimuistiteta missään kohtaa HTTP-yhteyttä.
Mukautetut virhesivut nginx:n kautta
Suosittelemme, että virheiden käsittely suoritettaisiin älykkäästi WordPress/PHP-koodissa. Lähtökohtaisesti nginx:n error_page -määrityksiä ei pitäisi olla tarvetta käyttää.
Määritys on kuitenkin mahdollinen, jos halutaan, että nginx tarjoilee virhesivuja PHP:n sijaan. Alla on esimerkki siitä, miltä /data/wordpress/nginx/error-pages.conf -tiedosto voisi sisältää:
fastcgi_intercept_errors on;
error_page 500 501 502 /wp-content/wp-error.php;
error_page 499 /wp-content/499.html;
Tämä virhesivu on riippumaton WordPress-pinoista ja toimii huolimatta WordPress-koodin PHP-virheistä. Tämä kuitenkin peittää kaikki PHP-virheiden tulosteet, joten se voi joskus häiritä vian selvittämistä. Myös välimuistipinon ylemmät kerrokset voivat poimia virhekoodin ja korvata vastauksen jollain muulla, joka välittää saman virheen.
