Mainos / Advertisement:

Nginx

Kohteesta Taisto
Loikkaa: valikkoon, hakuun
Tämä sivu sisältää muutoksia, joita ei ole merkitty käännettäväksi.

Muut kielet:
suomi

Nginx (lausuntaan engine-x) on toiseksi yleisin webbipalvelin Apachen jälkeen. Nginx käytetään nykyisin todella paljon suurissa palvelinkeskuksissa, esim. Google ja Facebook käyttävät tätä webbipalvelinta. Nginx sisältää HTTP, proxy ja sähköpostipalvelut.

Asennus

Asennetaan Nginx

aptitude install nginx

Käynnistä palvelu

 service nginx start

Debian

Jos haluat uudemman version (Nginx 1.8) lisää source.list tiedostoon dotdeb repot

 nano /etc/apt/source.list
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all

deb http://packages.dotdeb.org wheezy-php56 all
deb-src http://packages.dotdeb.org wheezy-php56 all

Sulje ja tallenna. Lisää lisäksi GnuPG avain

 wget https://www.dotdeb.org/dotdeb.gpg
 sudo apt-key add dotdeb.gpg

Tämän jälkeen aja komento

 aptitude update && aptitude dist-upgrade && aptitude install nginx

Tarkista Nginx versio

 nginx -v

Ubuntu

Luo nginx varten source.list.d alle source.listi.

sudo nano /etc/apt/source.list.d/nginx.list
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

Lataa PGP avain

wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Päivitä pakettilistaus ja asenna nginx

sudo apt update
sudo apt install nginx

Webbipalvelimen Konfigurointi

Nginx konfiguraatio hakemisto on:

 /etc/nginx

Avaa ja muokkaa tiedostoa

 /etc/nginx/sites-enabled/default

Kirjoita tiedostoon seuraavasti:


    server {
        listen 80;
        server_name example.org www.example.org;
        root /var/www;
        index index.html index.htm;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
   }

Virtuaalipalvelimet

http {
 
   server {
       # Virtuaalipalvelin 1
   }
 
   server {
       # Virtuaalipalvelin 2
   }
}

Virtuaalipalvelimeen voit määrittää myös IP-osoitteen ja portin, jota palvelin kuuntelee. Tuettuna on myös IPv6 osoitteet, mutta tämä on laitettava hakasulkeisiin.

 listen 127.0.0.1:8080;

Oletus virtuaalipalvelin:

 listen      80 default_server;

Määritetään palvelimen nimi, johon se vastaa. Tämä voi myös merkitä asteriksilläkin.

   server_name example.org www.example.org;

Sijainnit

 location /some/path/

Aliakset

location /i/ {
    alias /data/w3/images/;
}

Tiedostolistaukset

location /testing {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}

Virhesivut

error_page direktiivillä voit määrittää virhesivut. Määritä HTTP virhekoodi. Lista virhekoodeista löytyy täältä http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

 error_page 404 /404.html;


Kokeile muodostaa palvelimeen yhteys verkkoselaimella. Sivuston sisältöä voit muokata hakemistosta:

 /var/www

hakemistossa

Salasanasuojattu sivu

Lisätään /etc/nginx/sites-enabled/default tiedostoon pari riviä

location / {
auth_basic "Tähän voit määritellä ilmoituksen minkä haluat sivuille pyrkijöille ilmestyvän";
auth_basic_user_file tähän polkun tiedostoon josta löytyy salasanat käyttäjille;
}

Sitten tehdään tiedosto salasanoille

nano /var/www/.password

tiedosto on siis piilotettu

htpasswd -c /var/www/salaista/.password johannes

näin tehtiin käyttäjä

Pakkaaminen

Verkkosivut kannattaa pakata ennen lähettämistä, sillä se säästää kaistaa ja aikaa.


Otetaan käyttöön gzip pakkaus

gzip on;

Poistetaan käytöstä jos on IE6

gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;

Määritä gzip:n pakkauksen taso. Arvo voi olla 1 - 9 välillä.

gzip_buffers 16 8k;
gzip_http_version 1.1;

gziptyypit, css, json, javascript, xml, rss.

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

Tarkempi ohje Nginx sivuilla: http://nginx.org/en/docs/http/ngx_http_gzip_module.html

Testaa onko verkkosivu pakattu: http://nginx.org/en/docs/http/ngx_http_gzip_module.html

Suojaaminen

Estä Nginx version lähettäminen

Avaa Nginx konfigurointi tiedosto

 nano /etc/nginx/nginx.conf

ja muuta server-tokens arvoksi off.

server_tokens off;

Estä tietyt User-agentit ja hakukonebotit:

Avaa sites-enabled sivuston konfiguroinnit ja lisää server { alle.

 ## Block download agenta
    if ($http_user_agent ~* LWP::Simple|wget|libwww-perl) {
             return 403;
    }
 ## Block some nasty robots
    if ($http_user_agent ~ (msnbot|Purebot|Baiduspider|Lipperhey|Mail.Ru|scrapbot) ) {
             return 403;
    }

Estä spämmit

 ## Deny referal spam
    if ( $http_referer ~* (jewelry|viagra|nude|girl|nudit|casino|poker|porn|sex|teen|babes) ) {
    return 403; 
    }

Estä maakohtaisesti:

Sinun tulee ladata tietokanta ja purkaa pakattu gz tiedosto.

 http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

ja siirää sitten nginx hakemistoon sekä määrittää /etc/nginx/nginx.conf tiedostoon:

 geoip_country /etc/nginx/GeoIP.dat;

ja lisätä sitten sivusi konfiguraatioon maat jotka estetään. Esimerkissä on Kiina, Korea ja Yhdistyneet Kuningaskunnat (Iso-Britannia)

 if ($geoip_country_code ~ (CN|KR|UK) ) {
 return 403;
}

Estä suoralinkitys sivustosi materiaaliin. Vaihda mywebsite.com omaksi domainiksi.

 location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked mywebsite.com *.mywebsite.com;
    if ($invalid_referer) {
       return   403;
   }
}

Välityspalvelin

Esimerkki konfiguraatio Nginx käyttämisestä Reverse Proxynä.

location / {
    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;

    # Fix the “It appears that your reverse proxy set up is broken" error.
    proxy_pass          https://127.0.0.1;
    proxy_read_timeout  90;

   #Redirect http to https
   proxy_redirect      http://127.0.0.1:8080 https://ssl.proxy.local;
}


PHP asennus

Asenna PHP5-fpm paketti pakettihallinnasta

 apt-get install php5-fpm

Aptitude komento ei toimi Nginx kanssa.

 nano /etc/php5/fpm/php.ini
 Etsi rivi cgi.fix_pathinfo=1 ja muokkaa 1 -> 0.

Lisää seuraava rivi /etc/nginx/mime.types tiedostoon:

 text/php                             php php5;

Lisää tämä /etc/nginx/sites-enabled/default tiedostoon:

    server {
    ...
    index index.html index.htm index.php;
    ...
       location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 
               # With php5-cgi alone:
               #fastcgi_pass 127.0.0.1:9000;
               # With php5-fpm:
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
               include fastcgi_params;
       }
  }

Luo .php tiedosto, esim. index.php ja lisää sinne seuraava rivi:

 <?php phpinfo (); ?>

Avaa selain ja suuntaa palvelimesi IP-osoitteeseen ja sinulle pitäisi tulostua tietoa PHP:stä

HTTPS

Lisää seuraava konfigurointi tiedostoosi:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl on;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
 }


Muuta tästä SSL sertifikaatti tiedostojesi sijainti:

SSL sertifikaatti:

   ssl_certificate     www.example.com.crt;

SSL avain:

   ssl_certificate_key www.example.com.key;

SSL Chipper

Yksinkertainen SSL:

 ssl_ciphers 'AES256+EECDH:AES256+EDH';

Suosittu yhteensopivuuden kanssa:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!CAMELLIA';

DH Param

Luo DH Param. Tämä vie hetken:

 sudo openssl dhparam 2048 -out /etc/ssl/dhparam.pem

Avaa Nginx konfigurointi tiedosto sites-enabled hakemistosta ja liitä SSL konffeihin:

 ssl_dhparam /etc/ssl/dhparam.pem;

SPDY

SPDY on protokola joka parantaa verkkosivun suorituskykyä. Tämä toimii vain jos palvelin sekä asiakas tukevat tätä. Googlen palvelut esimerkiksi tukevat tätä.

Käyttöönotto on helppoa, tarvitset vain Nginx 1.4 mutta suositellaan 1.5 tai uudempaa.

Muuta vhost konfiguraatiosta

 listen 443 ssl; -> listen 443 ssl spdy;

ja lataa konfiguraatio uudelleen

 service nginx reload

Testaa toimivuus: https://spdycheck.org/

Http2

Http2 on päivitetty versio http1.1:stä ja sen pohjana on SPDY. Nginx versio 1.9 jälkeiset versiot tukevat tätä.

Muuta vhostiin:

 listen 443 ssl; -> listen 443 ssl http2;

ja lataa konfiguraatio uudelleen

 service nginx reload

Esimerkki

server {
   listen [::]:443 default_server;
 
   ssl on;
   ssl_certificate_key /etc/ssl/cert/raymii_org.pem;
   ssl_certificate /etc/ssl/cert/ca-bundle.pem;
 
   ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
 
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 5m;

   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.4.4 8.8.8.8 valid=300s;
   resolver_timeout 10s;
 
   ssl_prefer_server_ciphers on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;
 
   add_header Strict-Transport-Security "max-age=31536000";
   add_header X-Frame-Options SAMEORIGIN;
   add_header X-Content-Type-Options nosniff;

 
   root /var/www/;
   index index.html index.htm;
   server_name raymii.org;
 
 }

Uudelleenohjaus HTTP -> HTTPS

 return         301 https://$server_name$request_uri;

Uudelleenohjaus -> index.php

  location / {
        if (-f $request_filename) {
           expires 30d;
           break;
       }
       if (!-e $request_filename) {
           rewrite ^(.+)$ /index.php?q=$1 last;
       }
       }


Nginx + CloudFlare

Käyttäessäsi Nginx:llä CloudFlaren proxyä tallentuu lokiin vain CloudFlaren IP-osoitteet. Tälläin pitää hakea IP-osoite tiedot CloudFlarelta tulevalta real_ip_headeristä jotta lokiin tallentuisi kävijän IP-osoite.

Lisää alla oleva konfiguraatioon

server {
...
 # Cloudflare
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
real_ip_header CF-Connecting-IP;
...
}

Lisätietoa

https://www.omaserveri.info/virtuaalipalvelimen-luominen-nginxissa/

https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts

Lähteet

http://wiki.nginx.org/Install

https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04

https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

https://bjornjohansen.no/optimizing-https-nginx

Mainos / Advertisement: