Nginxin asennus ja palvelinlohkon määritys
Kerromme, miten Nginx asennetaan Ubuntuun, miten verkkotunnuksellesi avataan palvelinlohko, miten Node.js-sovellukselle määritetään käänteinen välityspalvelin (reverse proxy) ja miten yleiset virheet ratkaistaan.

Nginxin asennusta varten ajat komennot sudo apt update ja sudo apt install nginx ja sallit palomuurissa Nginx Full -profiilin. Sen jälkeen luot hakemistoon /etc/nginx/sites-available verkkotunnuksellesi palvelinlohkon, linkität sen sites-enabled-kansioon, testaat komennolla sudo nginx -t ja otat asetuksen käyttöön komennolla sudo systemctl reload nginx.
Mikä on Nginx ja mihin sitä käytetään?
Nginx on avoimen lähdekoodin verkkopalvelin ja käänteinen välityspalvelin, joka kestää suuren määrän samanaikaisia yhteyksiä vähällä muistilla. Se tarjoilee staattisia tiedostoja erittäin nopeasti; se asettuu Node.js-, Python- tai PHP-sovellusten eteen, välittää niille pyynnöt, päättää SSL:n ja toimii välimuistikerroksena.
Sen keskeinen ero Apacheen on tapa konfiguroida: Nginxissä ei ole hakemistokohtaista .htaccess-tiedostoa, vaan kaikki säännöt pidetään keskitetyssä konfiguraatiossa. Tämä parantaa suorituskykyä, mutta Apachesta siirtyvien on kirjoitettava sääntönsä uudelleen. Jos haluat tietää Apache-puolen vastineet, tutustu artikkeliin htaccess-uudelleenohjaus.
Tämä opas etenee Ubuntun ja Debianin kautta; macOS:n ja Windowsin kehitysympäristön asennuksen löydät omasta otsikostaan.
Edellytykset
Jos palvelimelle on asennettu myös Apache, kaksi palvelua yrittää kuunnella samaa porttia 80 eikä Nginx käynnisty. Pysäytä Apache ja poista se käytöstä tai määritä sen kuuntelemaan toista porttia.
- Ubuntua tai Debiania käyttävä palvelin ja käyttäjä, jolla on sudo-oikeudet
- Verkkotunnuksesi A-tietueen osoittaminen palvelimen IP-osoitteeseen
- Ei muuta porttia 80 ja 443 käyttävää palvelua (esim. Apache)
- Jos asennat käänteisen välityspalvelimen, palvelimella toimiva sovellus (esim. Node.js portissa 3000)
Nginxin asennusvaiheet Ubuntussa
Ubuntun oman varaston Nginx-paketti saa säännöllisesti tietoturvapäivityksiä ja riittää useimpiin projekteihin. Jos tarvitset uudemman pääversion, voit lisätä nginx.org-sivuston viralliset pakettivarastot.
sudo apt update
sudo apt install nginx
sudo systemctl enable --now nginx
sudo systemctl status nginx
# Palomuuri (jos käytät UFW:tä)
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
# Tarkistus
nginx -v
curl -I http://localhostTärkeät tiedostot ja kansiot
- /etc/nginx/nginx.conf: pääkonfiguraatiotiedosto
- /etc/nginx/sites-available/: määritellyt palvelinlohkot
- /etc/nginx/sites-enabled/: käytössä oleviin lohkoihin tehdyt linkit
- /var/www/: yleinen juurikansio sivuston tiedostoille
- /var/log/nginx/access.log ja error.log: pyyntö- ja virhelokit
Miten palvelinlohko luodaan?
Palvelinlohko (server block) vastaa Apachen virtuaalipalvelinta ja mahdollistaa useiden verkkotunnusten ylläpidon yhdellä palvelimella. Erillisen tiedoston avaaminen jokaiselle sivustolle helpottaa hallintaa.
Luo ensin sivuston kansio ja määritä omistajuus, sitten kirjoita konfiguraatiotiedosto. Lisää server_name-riville sekä paljas verkkotunnus että www-versio; Certbotin kaltaiset työkalut lukevat tämän rivin saadakseen varmenteen.
sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
echo '<h1>ornek.com toimii</h1>' > /var/www/ornek.com/html/index.html
sudo nano /etc/nginx/sites-available/ornek.comserver {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/ornek.com.access.log;
error_log /var/log/nginx/ornek.com.error.log;
}sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
# Jos haluat poistaa oletusetusivun käytöstä
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginxNginx reverse proxy -asetus
Sen sijaan että Node.js-, Python- tai muu sovelluspalvelin avattaisiin suoraan internetiin, Nginxin asettaminen sen eteen on yleinen ja turvallinen ratkaisu. Nginx kuuntelee portteja 80 ja 443 ja välittää pyynnöt paikallisesti toimivalle sovellukselle; sovelluksen oma portti pysyy suljettuna ulospäin.
Alla olevassa esimerkissä sovellus toimii portissa 3000. Todellisen asiakkaan IP-osoitteen ja protokollan välittämiseksi sovellukselle lisätään proxy-otsikot; WebSocketia käyttäville sovelluksille tarvitaan myös Upgrade-otsikot.
Jos ajat samalla palvelimella useita sovelluksia, selkeintä on antaa jokaiselle oma alidomain ja oma palvelinlohko. Esimerkiksi hallintapaneeli voidaan julkaista osoitteessa panel.ornek.com ja API osoitteessa api.ornek.com; kun jokaisella lohkolla on oma lokitiedostonsa, on myös helpompi selvittää, mistä sovelluksesta ongelma johtuu. Muista myös ottaa käyttöön käyttämäsi kehyksen luotettu välityspalvelin (trust proxy) -asetus, jotta sovellus voi lukea todellisen asiakkaan IP-osoitteen.
server {
listen 80;
server_name app.ornek.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
client_max_body_size 20m;
}HTTPS, pakkaus ja välimuisti
Kun palvelinlohko toimii, seuraava vaihe on siirtyä HTTPS:ään ilmaisella varmenteella. Certbotin Nginx-liitännäinen hankkii varmenteen ja lisää puolestasi 443-lohkon ja uudelleenohjauksen; vaiheet kävimme läpi oppaassa SSL-varmenteen asennus.
Nopeuden kannalta gzip-pakkaus ja staattisten tiedostojen pitkäaikaiset välimuistiotsikot tekevät suuren eron. Verkkotunnuksen siirtäminen Cloudflaren kaltaisen CDN:n taakse tarjoilee myös staattisen sisällön kävijää lähempää; asennuksen löydät artikkelista Cloudflaren asennus.
- Jos käytät tiedostonimissä versiosormenjälkeä (esim. app.3f9a.css), voit pidentää välimuistiaikaa entisestään.
- Älä välimuistita HTML-tiedostoja pitkäksi aikaa; muuten päivitykset tavoittavat kävijän myöhään.
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
location ~* \.(css|js|webp|avif|png|jpg|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public";
}Perusturva-asetukset
Oletusasennus toimii, mutta ennen tuotantoon siirtymistä muutama yksinkertainen asetus kaventaa hyökkäyspintaa selvästi. Mikään niistä ei vaadi lisäohjelmistoja; riittää, että lisäät konfiguraatioon muutaman rivin.
Ensimmäiseksi kannattaa poistaa käytöstä server_tokens; silloin Nginxin versionumero ei näy virhesivuilla ja otsikoissa. Lisää sen jälkeen oletuslohko, joka vastaanottaa määrittelemättömillä verkkotunnuksilla tulevat pyynnöt. Tämä lohko estää palvelimesi IP-osoitteeseen suoraan tulevia botteja näkemästä ensimmäistä sivustoasi.
Myös piilotiedostoihin pääsyn estäminen on tärkeää. Juurikansioon vahingossa jäänyt .git-kansio tai .env-tiedosto voi paljastaa lähdekoodisi tai tietokannan salasanat kaikille. Tällaiset vuodot johtuvat yleensä kiireessä tehdystä latauksesta, ei pahantahtoisuudesta.
Lopuksi päivitä palvelimen paketit säännöllisesti ja pidä auki vain ne portit, joita todella tarvitset. Kun julkaiset verkkosivustoprojektin tai verkkokauppa-alustan, tämän tarkistuslistan soveltaminen joka kerta alusta vähentää jälkikäteen tulevia yllätyksiä merkittävästi.
# /etc/nginx/nginx.conf, http-lohkon sisään
server_tokens off;
# Oletuslohko, joka hylkää määrittelemättömät verkkotunnukset
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 444;
}
# Sivustolohkon sisään: estä piilotiedostot
location ~ /\.(?!well-known) {
deny all;
}Kehitysympäristö macOS:ssä ja Windowsissa
Vaikka tuotantopalvelin on enimmäkseen Linux, konfiguraation kokeileminen paikallisesti nopeuttaa työtäsi. macOS:ssä Homebrewlla asennettu Nginx kuuntelee oletuksena porttia 8080, ja sen konfiguraatiotiedosto on Homebrew-etuliitteen alla olevassa etc/nginx-kansiossa.
Vaikka nginx.org-sivustolla on Windows-käännös, viralliset dokumentit toteavat tämän version rajoitukset. Windowsissa käytännöllisintä on ajaa Linux-versiota Dockerissa tai WSL:ssä; näin testaat samassa ympäristössä kuin tuotantopalvelin.
macOS (Homebrew)
brew install nginx
brew services start nginx
nginx -t
# Asetuskansio
ls $(brew --prefix)/etc/nginx
curl -I http://localhost:8080Windows (Docker)
docker run -d --name web -p 8080:80 nginx
curl.exe -I http://localhost:8080Yleiset virheet ja ratkaisut
Virheenkorjauksessa ensimmäinen askel on aina tarkistaa syntaksi komennolla sudo nginx -t ja sen jälkeen error.log-tiedosto. Useimmat ongelmat ratkeavat tämän yhden rivin viestillä.
| Oire | Todennäköinen syy ja ratkaisu |
|---|---|
| 502 Bad Gateway | Taustalla oleva sovellus ei toimi tai portti on väärä; tarkista sovellus ja proxy_pass-osoite. |
| 403 Forbidden | Kansion oikeudet ovat riittämättömät tai index-tiedosto puuttuu; tarkista omistajuus ja index-rivi. |
| Address already in use | Portin 80 käyttää toinen palvelu; etsi se komennolla ss -tlnp ja pysäytä. |
| conflicting server name | Sama server_name on määritelty kahdessa lohkossa; poista kaksoiskappale. |
| 413 Request Entity Too Large | Ladattu tiedosto ylittää rajan; kasvata client_max_body_size-arvoa. |
sudo nginx -t
sudo tail -n 50 /var/log/nginx/error.log
sudo ss -tlnp | grep -E ':80|:443'Usein kysytyt kysymykset
01Kumpi on parempi, Nginx vai Apache?
Molemmat ovat kypsiä ja luotettavia palvelimia. Nginx erottuu suuren samanaikaisen liikenteen ja käänteisen välityspalvelimen käytössä, Apache taas tarjoaa joustavuutta jaetussa webhotellissa .htaccess-tuen ansiosta. Monet infrastruktuurit käyttävät molempia yhdessä.
02Mikä ero on restartilla ja reloadilla?
reload lataa uuden konfiguraation katkaisematta käynnissä olevia yhteyksiä; sitä tulee suosia päivittäisissä muutoksissa. restart pysäyttää palvelun kokonaan ja käynnistää sen uudelleen, ja se voi aiheuttaa lyhyen katkon.
03Kuinka monta sivustoa voin ylläpitää yhdellä palvelimella?
Rajan määrittävät palvelimen resurssit, ei Nginx. Avaamalla jokaiselle verkkotunnukselle erillisen palvelinlohkon voit ajaa suuren määrän sivustoja samalla koneella; liikenteen kasvaessa muistin, prosessorin ja levyn käyttöä on seurattava.
04Voiko Nginxillä tehdä kuormantasausta?
Kyllä. Kun määrittelet upstream-lohkossa useita sovelluspalvelimia ja ohjaat proxy_passilla tähän ryhmään, Nginx jakaa pyynnöt palvelimien kesken. Oletusmenetelmä on vuorotteleva jako; käyttäytymistä voi muuttaa menetelmillä kuten least_conn tai ip_hash.
Oikein asennettu Nginx tarjoaa nopean, turvallisen ja useita sovelluksia kantavan perustan. Jos haluat käsitellä palvelinasetukset, välimuistin ja Core Web Vitals -tavoitteet yhdessä, tutustu nopeus- ja suorituskykyoptimointi -palveluumme. Omalla palvelimella toimivasta räätälöidystä järjestelmästä tai valmiista Aurora-ratkaisuista, kuten hotelliohjelmistosta, voit kysyä meiltä yhteydenottosivun kautta.


