Siirry pääsisältöön

Nginx-verkkopalvelin

Seravo.com käyttää nginx-palvelinta laajasti sekä WordPress-ympäristössämme että reitityskerroksessa. Tässä on lyhyt kuvaus nginx-palvelimen käytöstä

Päivitetty tällä viikolla

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")
}

Vastasiko tämä kysymykseesi?