Nginx ja Apache2 ovat kaksi ns. valtavirta-asennusta, kun otetaan webserveri käyttöön. Jos jätetään tekniset erot syrjään, niin valintaan vaikuttaa muutama asia. Jos sinulla on asiakkaiden sivustoja hostattavana, joita he ylläpitävät itse, niin asenna Apache2. Lisäksi jos haluat löytää nopeasti ohjeita, niin Apache on valinta. Jos sen sijaan hallitset yksinäsi kaikkea, etsit tehoja ja sinulla ei ole estoja etsiä ratkaisuja foorukeskusteluista, niin Nginx on vahva ehdokas. Molemmat tekevät saman työn ja kävijät eivät huomaa eroa.
Minulla on Varnish välimuistittamassa ja sen takana on Apache2. Ihan pelkästään helppouden takia, koska reverse proxy takaa sen, että minun ei tarvitse miettiä serverin tehokkuutta. Sen sijaan Varnishin edessä minulla on Nginx hoitamassa SSL-liikenteen portissa 443. Ei siihenkään tehoja tarvita ja sama työ hoituisi aivan mallikkaasti Apachella, mutta valitsin Nginxin kahdesta syystä. Syyt olivat opettelu ja sekä tarvitsin jonkun hoitamaan SSL:n Varnishin edessä Toki sen hoitaisi Apachekin, mutta Nginx osaa myös HTTP/2:sen ja Apache2 ei.
Googlen kautta löytää paljonkin juttuja kuinka Nginx on otettu käyttöön HTTP/2 protokollan takia, jonka hoitamisessa Apache2 on liian konservatiivinen. Löydät nopeastikin ohjeita miten Apachella otetaan käyttöön mod_http2, mutta se ei aidosti tee mitään. Johtuu siitä, että selainvalmistajat päättävät voidaanko HTTP/2 ottaa käyttöön vai ei ja koska he edellyttävät ekstraturvallisuutta, niin Apache2 kompastuu. SSL-liikenne hoituu kyllä, mutta toinen vaadittu, ALPN, ei. Olet varmasti törmännyt sähköpostiohjelmissa salauspuolella TLS lyhenteeseen. Lyhyestä virsi kaunis: ALPN ottaa TLS:n käyttään websivuilla, mutta Apache ei tue sitä. Ja kun selain ei saa sitä mitä haluaa, niin pudotaan takaisin normaaliin HTTP/1.1 protokollaan.
Ongelma Nginxin suhteen on siinä, että sekään ei kykene käyttämään TLS-protokollaa, jonka takia HTTP/2 ei aidosti onnistu silläkään.
Huutele kommenteissa, jos tietoni ovat tuolta osin vanhentuneita ja jommankumman tai molempien sebservereiden tilanne on kehittynyt.
Varnish-käyttäjät voivat ottaa käyttöön sellaisen ihmeen kuin Hitch. Se hoitaa niin SSL:n kuin HTTP/2:den ja tuhottomasti tehokkaammin kuin kumpikaan webserveri milloinkaan pystyy tekemään. Käytin Hitchiä hetken, mutta jouduin luopumaan siitä. Moodle ei suostu toimimaan, kun edessä on HTTP/2 terminaattori, enkä ymmärrä miksi – ei Varnishin takana oleva appi sitä tiedä, vaan kaikki liikenne tulee sille portin 80 kautta (oikeammin esimerkiksi portin 8080, mutta ei takerruta teknisiin detaljeihin; kyse on siitä, että VArnoshin takana on vain tavallista http-liikennettä).
Perusasennus
apt update
apt install nginx
ufw app list
ufw allow ”Nginx Full”
mkdir -p /var/www/example.tld/public_html
chown -R www-data:www-data /var/www/example.tld/public_html
chmod -R 755 /var/www/example.com
nano /etc/nginx/nginx.conf
# server_names_hash_bucket_size 64;
nginx -t
systemctl restart nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
PHP-FPM
apt install php-fpm
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; }
ffddf
Virtual host
nano /etc/nginx/sites-available/example.com
server { listen 80; listen [::]:80; root /var/www/example.com/html; index index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; location / { try_files $uri $uri/ =404; } }
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
unlink /etc/nginx/sites-enabled/default
SSL
apt install letsencrypt
certbot –nginx -d example.com -d www.example.com
certbot renew –dry-run
Varnish
apt install varnish
Poista tai kommentoi listen 80 rivit ja laita:
listen 443