Kyllä. Olemme optimoineet HTTP-palvelimemme eli nginx:n valmiiksi, joten useimmiten omia asetuksia ei tarvitse erikseen tehdä.
Oletusarvoinen nginx-konfiguraatiomme sisältää:
Vahvat HTTPS-asetukset (katso esimerkki)
Let’s Encrypt -varmenne julkisia verkkotunnuksiasi varten
HTTP-välimuisti, jossa on määritetty välimuistin vanhentuminen (stale cache)
Automaattiset vanhentumisotsakkeet (expiration headers) staattiselle sisällölle
Käyttäjän konfiguroitava API
gzip
Ja paljon muuta…
Joskus voi kuitenkin ilmetä tarve tehdä asiakaskohtaisia lisäyksiä, kuten esimerkiksi HTTP-uudelleenohjauksia (redirect). Uudelleenohjaukset on helppo tehdä WordPressissä suoraan, esim. Redirection-lisäosalla tai käsin kirjoittamalla wp_rewrite-sääntöjä. Lisätietoa uudelleenohjauksista löydät myös tästä ohjeestamme.
Suosittelemme muokkamaan nginx-asetuksia vain silloin, jos tarvittuja muutoksia ei pysty tekemään WordPressin ja sen lisäosien avulla.
Varoitus!
Väärät asetukset tai ohjaukset voivat johtaa koko sivuston toimimattomuuteen.
Mikäli haluat tehdä muutoksia HTTP-palvelimen asetuksiin tai ohjauksiin, voit luoda uuden .conf-päätteisen tiedoston palvelimella hakemistoon /data/wordpress/nginx/. Tämä tiedosto vastaa järjestelmässämme Apachen juurihakemiston .htaccess-tiedostoa.
Alla on muutamia yleisimpiä asetuksia. Voit esimerkiksi kopioida jonkin allaolevista esimerkeistä tiedostoon /data/wordpress/nginx/custom.conf-tiedostoon, vaihtamalla oman sivustosi domainin esimerkkiin ja käynnistää nginxn uudelleen ajamalla komentorivillä wp-restart-nginx.
Taustalla mukautettu nginx-konfiguraatiosi on mukana seuraavasti:
server {
listen 80 default_server;
server_name your-site.com;
...
include /data/wordpress/nginx/*.conf;
...
}
Pakota sivuston liikenne salatuksi
Luomme kaikille sivustoille automaattisesti SSL-sertifikaatin. Yleensä sivuston liikenne on salattu, kunhan WordPressin asetuksissa (Asetukset > Yleinen) asetukset "Sivuston osoite" ja "WordPressin osoite" alkavat "https://". Mikäli liikenne jostain syystä näyttää edelleen kulkevan salaamatonta HTTP-protokollaa käyttäen, voit käyttää allaolevaa, joka pakottaa kaiken liikenteen salatuksi (käyttämään HTTPS-protokollaa).
# Copy-paste this as-is, do not modify
if ( $ssl = false ) {
return 301 https://$http_host$request_uri;
}
Ohjaa yksittäinen sivu toiselle sivulle
Sivuston uudistuksen yhteydessä usein sivurakenne hieman muuttuu, jolloin linkit vanhoille sivuille lakkaavat toimimasta. Tällöin voit tehdä sivujen uudelleenohjauksia uusille korvaaville sivuille seuraavasti.
# Simple 302 (temporary) redirect rule
rewrite ^/original-page https://esimerkki.fi/uusi-sivu/;
# OR
# Simple 301 (permanent) redirect rule
rewrite ^/original-page https://esimerkki.fi/uusi-sivu/ permanent;
Uudelleenkirjoita kaikki vanhat *.html-tiedostot WordPress-sivuiksi, joissa on siistit URL-osoitteet:
rewrite ^/([0-9a-z-]+)\.html /$1/ permanent;
Tarjoa maakohtaiset sivut (esimerkki.es, esimerkki.de jne.) kustomoidusta PHP-tiedostosta:
if ($host ~ ”example.es|example.de”) {
rewrite ^(/)?$ /country-pages/index.php last;
}
Käytä jotain Rexexpalin kaltaista ohjelmaa säännöllisten lausekkeiden testaamiseen ja muista käyttää curl -IL:ää uudelleenohjauksien testaamiseen, jotta sinun ei tarvitse vaivautua tavallisen selaimen välimuistin kanssa.
Jos sivustollasi on useita verkkotunnuksia ja haluat käyttää vain yhtä niistä:
if ($host ~ ”old-subdomain.your-old-site.com”) {
return 301 https://your-site.com$request_uri;
}
Ohjaa verkkotunnus laskeutumissivulle
Sivustoon voi osoittaa useampi kuin yksi verkkotunnus (domain). Sivustolla voi olla käytössä pääverkkotunnus (esim. esimerkki.fi), mutta tuotteelle tai kampanjalle on olemassa oma laskeutumissivu, johon on ohjattu oma verkkotunnus (esim. esimerkki.com).
# Redirect from a certain domain to a specific page
if ($host = esimerkki.fi) {
return 301 https://esimerkki.com/laskeutumissivu/;
}
if ($host = www.esimerkki.fi) {
return 301 https://esimerkki.com/laskeutumissivu/;
}
Jotta muutokset tulevat voimaan, täytyy nginx käynnistää uudelleen. Voit ensin testata, että onko nginx-säännöt kirjoitettu oikein komennolla:
wp-restart-nginx --test
Jos kaikki näyttää hyvältä, eikä testi palauta virheitä, voit käynnistää nginx:n uudelleen komennolla:
wp-restart-nginx
Oletko ohjaamassa uutta verkkotunnusta?
Ylläolevan asetuksen lisäksi sinun täytyy olla yhteydessä asiakaspalveluumme, mikäli kyseessä on uusi domain, tai sitä ei ole ilmoitettu meille aiemmin. Ilmoita uusi verkkotunnus lähettämällä viesti osoitteeseen [email protected].
Lisäämme kyseisen lisäverkkotunnuksen palvelimen tietoihin, jotta sertifikaatti saadaan asettumaan ja ohjaukset toimimaan oikein. DNS-muutosten jälkeen ohjaukset alkavat toimia n. tunnin kuluessa.
Uudelleenohjauksien testaus
Käytä curl-komentoa uudelleenohjauksien testaamiseen. Selaimen käyttö testaukseen ei toimi, koska selain tallentaa useimmissa tapauksissa ensimmäisen uudelleenohjauksen välimuistiin, minkä jälkeen muutokset eivät näy selaimella testattaessa. Curl-komennon käyttö Pragma:no-cache määrityksellä varmistaa, että välimuistia ei käytetä lainkaan ja se tulostaa location: -otsikot, jotka osoittavat selvästi mikä uudelleenohjaus on kyseessä.
Esimerkki:
curl -IL -H Pragma:no-cache www.example.org
HTTP/1.1 200 OK
X-Cache: BYPASS
Location: https://example.com/
Content-Length: 100
HTTP/1.1 200 OK
X-Cache: BYPASS
Content-Length: 1270
Kahden eri sivuston käyttö samalla verkkotunnuksella
Joskus on järkevää, että sama verkkotunnus palvelee kahta erillistä sivustoa, sillä se parantaa käyttökokemusta ja sivustojen sisällön hakukoneiden sijoitusta verrattuna tilanteeseen, jossa sivusto on jaettu erillisiin verkkotunnuksiin tai aliverkkotunnuksiin. Esimerkiksi suurin osa sivustosta esimerkki.fi voisi olla WordPress-alustalla, mutta osa esimerkki.fi/kauppa voisi olla Magento-alustalla.
Tämä voidaan toteuttaa nginx-välipalvelimen (eng. proxy) avulla. Luo esimerkiksi tiedosto nimeltä /data/wordpress/nginx/store-proxy.conf, jonka sisältö on seuraava:
location /store/ {
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_pass https://store.example.com/;
}
Suojatut/autentikoidut lataukset
Polku /wp-content/uploads/woocommerce_uploads/ on esiasetettu suojatuksi Seravolla ja käytettävissä vain, kun autentikointi on suoritettu WooCommerce/WordPress/PHP:ssä, kun taas lataus itsessään hoidetaan nginx:n kautta X-Sendfile -otsakkeen ohjeiden mukaisesti.
Käyttäjä voi sijoittaa minkä tahansa tiedoston kyseiseen polkuun, eikä palvelin salli sen suoraa lataamista. Tiedostoon pääsee käsiksi vain, jos PHP-koodi lähettää erityisen X-Accel-Redirect -otsakkeen, jossa on kyseisen sijainnin tiedoston polku.
Tämä on oikea tapa toteuttaa tällainen ominaisuus, koska PHP-suorittajaa (eng. worker) ei varata koko latausta varten, vaan se voi jatkaa muiden PHP-pyyntöjen käsittelyä, kun lataus on siirretty nginx:n käsiteltäväksi.
Voit luoda samanlaisen suojatun kansion mukautettuun sijaintiin lisäämällä seuraavan koodin esimerkiksi tiedostoon /data/wordpress/nginx/protected-downloads.conf:
location /protected-files { internal; alias /data/wordpress/protected-files/; }
PHP:ssä lähetä otsakkeet seuraavasti:
// Do authentication etc first
if ( current_user_can( 'download_special_files' ) ) {
// Emit header to Nginx which will send the file to requester
header('X-Accel-Redirect: //protected-files/confidential.pdf');
} else {
echo 'Access denied.';
die();
}
Automaattisesti vanhentuvat, suojatut latauslinkit
Huom: Älä käytä suojattua linkkitoimintoa WooCommercen kanssa. Käytä sen sijaan WooCommercen sisäänrakennettua digitaalisen latauksen toimintoa, joka toimii Seravolla heti käyttövalmiina.
Nginx Secure Link -moduulia voidaan käyttää luomaan linkkejä ladattaviin kohteisiin (esimerkiksi PDF-tiedostoihin), jotka ovat voimassa vain lyhyen ajan.
Esimerkki nginx-määrityksestä, esim. /data/wordpress/nginx/securelink.conf:
# Make folder inaccessible publicly
location /my-restricted-files/ {
internal;
alias /data/wordpress/my-restricted-files/;
}
# Define secure link
location ~ /my-restricted-files/(.*) {
# Define values used in generating secure links
secure_link $arg_md5, $arg_expires;
# Define link form. Replace ASDF1234 with an unique secret
secure_link_md5 "$secure_link_expires$uri ASDF1234";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
}
Käytä linkkien luomiseen PHP:ssa jotain seuraavanlaista:
function securelink($path) {
$secret = 'ASDF1234'; // the same secret as in Nginx config
$expires = time() + 86400; // 24h in seconds
$url = md5sum("$expires/my-restricted-files/example.pdf $SECRET")
}
Lisätietoja
Lisää tietoja nginx-HTTP-palvelimen käytöstä löydät NGINX:n kotisivuilta (englanniksi) sekä dokumentaatiostamme.
