Taustaa
Perinteisesti useimmat hosting-sivustot ovat käyttäneet Apache-palvelinta yhdessä PHP:n kanssa ensisijaisena web-palvelimenaan. Viime vuosina monet ovat kuitenkin siirtyneet Apache-palvelimesta nginx-palvelimeen suorituskyvyn ja joustavuuden parantumisen vuoksi.
Oletusasetukset
Nginx on esiasetettu käytettäväksi WordPressin kanssa Seravo-asetuksissa. Sinun ei siis tarvitse lukea verkosta ohjeita sen asettamiseksi.
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…
Konfigurointi
Useimmissa yleisissä Apachen hosting-alustoissa voit käyttää .htaccess -tiedostoja lisätäksesi mukautettuja sääntöjä web-palvelimellesi. Tähän on useita syitä, joista yksi on sivuston kaikkien sivujen latautumisen luonnostaan hitaampi suoritusaika. Sen sijaan annamme käyttäjillemme pääsyn nginx-konfiguraatioon hakemiston kautta, joka sisältää .conf -tiedostot, jotka nginx lukee käynnistyksen yhteydessä. Nämä konfiguraatiotiedostot löytyvät hakemistosta /data/wordpress/nginx/*.conf.
Huom: Taustalla mukautettu nginx-konfiguraatiosi on mukana seuraavasti:
server {
listen 80 default_server;
server_name your-site.com;
...
include /data/wordpress/nginx/*.conf;
...
}
Kuinka luoda omia sääntöjä
Tiedosto /data/wordpress/nginx/examples.conf sisältää muutamia esimerkkejä, joista voit aloittaa. Ne ovat kaikki kommenttien avulla poistettu käytöstä. Suosittelemme, että et muokkaa tätä tiedostoa suoraan. Jätä se viitteeksi ja luo oma custom.conf -tiedosto alusta alkaen.
cd /data/wordpress/nginx
nano custom.conf
Voit aloittaa konfiguroinnin kopioimalla sisältöä examples.conf -tiedostosta. Poista rivin alussa olevat kommentit ja muokkaa sääntöjä sivustosi erityistarpeiden mukaan.
Nginx:n uudelleenkäynnistys
Kun olet tehnyt muutokset nginx-konfiguraatioon, lataa se uudelleen suorittamalla tämä komento:
wp-restart-nginx
Jos virheitä ilmenee, wp-restart-nginx varoittaa sinua niistä ja kieltäytyy käynnistymästä uudelleen ennen kuin ongelma on korjattu.
Esimerkkejä
Uudelleenohjaukset
Katso erillinen ohjesivumme uudelleenohjauksista. Useimmissa tapauksissa on suositeltavaa suorittaa uudelleenohjaus ja HTTP-pyynnön uudelleenkirjoituslogiikka WordPress/PHP:ssä, joka on paljon joustavampi kuin nginx. Uudelleenohjauksien toteuttamisessa WordPress/PHP:ssä ei ole haittoja, sillä se on yhtä nopeaa heti, kun ensimmäinen uudelleenohjaus on tallennettu välimuistiin.
HTTPS:n pakottaminen
Jos haluat pakottaa kaikki käyttäjät muodostamaan yhteyden https:n kautta, voit ohjata heidät HTTPS-puolelle nginx-määrityksillä.
Huom: WordPressissa on useita sisäänrakennettuja menetelmiä HTTPS:n pakottamiseksi, ja Seravo Plugin pakottaa sekä HTTPS:n että kanonisen verkkotunnuksen, kun se havaitsee niiden olevan käytettävissä. Siksi alla olevaa nginx-määritystä ei yleensä pitäisi käyttää.
Suositeltava menetelmä nginx:ssä HTTPS:n pakottamiseen on mukautetun muuttujan käyttö.
Force redirect http -> https
set $force_https 1;
HSTS-otsakkeiden lisääminen
HTTPS-käytön pakottamisessa on myös hyvä lähettää HSTS-otsake, joka kertoo selaimille, että sivusto saa käyttää vain HTTPS:ää, ja selaimet itse auttavat tämän pakottamisessa.
Yksinkertaisin muoto tehdä tämä olisi:
add_header Strict-Transport-Security "max-age=63072000";
Laajin versio on tämä:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
Muista tarkistaa hstspreload.org-työkalun avulla, että HSTS-otsake on määritetty oikein!
Huom: nginx-määritysten avulla ei ole pakko lähettää HSTS-otsakkeita. Ne voidaan lähettää myös sivuston PHP-koodista header() -toiminnon avulla.
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")
}
