Ero sivun ”Nginx” versioiden välillä
(32 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
+ | <languages/> | ||
+ | <translate> | ||
+ | <!--T:1--> | ||
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. | 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 == | + | == Asennus == <!--T:2--> |
− | Asennetaan Nginx | + | <!--T:3--> |
+ | Asennetaan Nginx | ||
− | [[aptitude]] install nginx | + | <!--T:4--> |
+ | [[aptitude]] install nginx | ||
+ | <!--T:5--> | ||
Käynnistä palvelu | Käynnistä palvelu | ||
− | service nginx start | + | <!--T:6--> |
+ | service nginx start | ||
+ | === Debian === | ||
− | + | <!--T:7--> | |
+ | Jos haluat uudemman version (Nginx 1.8) lisää source.list tiedostoon dotdeb repot | ||
+ | <!--T:8--> | ||
+ | nano /etc/apt/source.list | ||
+ | |||
+ | <!--T:9--> | ||
+ | <pre> | ||
+ | deb http://packages.dotdeb.org wheezy all | ||
+ | deb-src http://packages.dotdeb.org wheezy all | ||
+ | |||
+ | <!--T:10--> | ||
+ | deb http://packages.dotdeb.org wheezy-php56 all | ||
+ | deb-src http://packages.dotdeb.org wheezy-php56 all | ||
+ | </pre> | ||
+ | |||
+ | <!--T:11--> | ||
+ | Sulje ja tallenna. Lisää lisäksi GnuPG avain | ||
+ | |||
+ | <!--T:12--> | ||
+ | wget https://www.dotdeb.org/dotdeb.gpg | ||
+ | sudo apt-key add dotdeb.gpg | ||
+ | |||
+ | <!--T:13--> | ||
+ | Tämän jälkeen aja komento | ||
+ | |||
+ | <!--T:14--> | ||
+ | aptitude update && aptitude dist-upgrade && aptitude install nginx | ||
+ | |||
+ | <!--T:15--> | ||
+ | Tarkista Nginx versio | ||
+ | |||
+ | <!--T:16--> | ||
+ | nginx -v | ||
+ | |||
+ | === Ubuntu === | ||
+ | |||
+ | Luo nginx varten source.list.d alle source.listi. | ||
+ | |||
+ | sudo nano /etc/apt/source.list.d/nginx.list | ||
+ | |||
+ | <pre> | ||
+ | deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx | ||
+ | deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx | ||
+ | </pre> | ||
+ | |||
+ | 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 == <!--T:17--> | ||
+ | |||
+ | <!--T:18--> | ||
Nginx konfiguraatio hakemisto on: | Nginx konfiguraatio hakemisto on: | ||
− | /etc/nginx | + | <!--T:19--> |
+ | /etc/nginx | ||
+ | <!--T:20--> | ||
Avaa ja muokkaa tiedostoa | Avaa ja muokkaa tiedostoa | ||
− | /etc/nginx/sites-enabled/default | + | <!--T:21--> |
+ | /etc/nginx/sites-enabled/default | ||
+ | <!--T:22--> | ||
Kirjoita tiedostoon seuraavasti: | Kirjoita tiedostoon seuraavasti: | ||
− | server { | + | <!--T:23--> |
+ | server { | ||
listen 80; | listen 80; | ||
server_name example.org www.example.org; | server_name example.org www.example.org; | ||
Rivi 35: | Rivi 104: | ||
} | } | ||
− | === Virtuaalipalvelimet === | + | === Virtuaalipalvelimet === <!--T:24--> |
− | http { | + | <!--T:25--> |
+ | http { | ||
server { | server { | ||
Rivi 48: | Rivi 118: | ||
} | } | ||
+ | <!--T:26--> | ||
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. | 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; | + | <!--T:27--> |
+ | listen 127.0.0.1:8080; | ||
+ | <!--T:28--> | ||
Oletus virtuaalipalvelin: | Oletus virtuaalipalvelin: | ||
− | listen 80 default_server; | + | <!--T:29--> |
+ | listen 80 default_server; | ||
+ | <!--T:30--> | ||
Määritetään palvelimen nimi, johon se vastaa. Tämä voi myös merkitä asteriksilläkin. | Määritetään palvelimen nimi, johon se vastaa. Tämä voi myös merkitä asteriksilläkin. | ||
− | server_name example.org www.example.org; | + | <!--T:31--> |
+ | server_name example.org www.example.org; | ||
− | === Sijainnit === | + | === Sijainnit === <!--T:32--> |
− | location /some/path/ | + | <!--T:33--> |
+ | location /some/path/ | ||
− | ==== Aliakset ==== | + | ==== Aliakset ==== <!--T:34--> |
− | location /i/ { | + | <!--T:35--> |
+ | location /i/ { | ||
alias /data/w3/images/; | alias /data/w3/images/; | ||
} | } | ||
− | ==== Tiedostolistaukset ==== | + | ==== Tiedostolistaukset ==== <!--T:36--> |
− | location /testing { | + | <!--T:37--> |
+ | location /testing { | ||
autoindex on; | autoindex on; | ||
autoindex_exact_size off; | autoindex_exact_size off; | ||
Rivi 78: | Rivi 157: | ||
} | } | ||
− | === Virhesivut === | + | === Virhesivut === <!--T:38--> |
+ | <!--T:39--> | ||
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 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; | + | <!--T:40--> |
+ | error_page 404 /404.html; | ||
+ | <!--T:41--> | ||
Kokeile muodostaa palvelimeen yhteys verkkoselaimella. Sivuston sisältöä voit muokata hakemistosta: | Kokeile muodostaa palvelimeen yhteys verkkoselaimella. Sivuston sisältöä voit muokata hakemistosta: | ||
− | /var/www | + | <!--T:42--> |
+ | /var/www | ||
+ | <!--T:43--> | ||
hakemistossa | hakemistossa | ||
− | === Salasanasuojattu sivu === | + | === Salasanasuojattu sivu === <!--T:44--> |
+ | <!--T:45--> | ||
Lisätään ''/etc/nginx/sites-enabled/default'' tiedostoon pari riviä | Lisätään ''/etc/nginx/sites-enabled/default'' tiedostoon pari riviä | ||
− | location / { | + | <!--T:46--> |
+ | location / { | ||
auth_basic "''Tähän voit määritellä ilmoituksen minkä haluat sivuille pyrkijöille ilmestyvän''"; | 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''; | auth_basic_user_file ''tähän polkun tiedostoon josta löytyy salasanat käyttäjille''; | ||
} | } | ||
+ | <!--T:47--> | ||
Sitten tehdään tiedosto salasanoille | Sitten tehdään tiedosto salasanoille | ||
− | nano /var/www/.password | + | <!--T:48--> |
+ | nano /var/www/.password | ||
+ | <!--T:49--> | ||
tiedosto on siis piilotettu | tiedosto on siis piilotettu | ||
− | htpasswd -c /var/www/salaista/.password johannes | + | <!--T:50--> |
+ | htpasswd -c /var/www/salaista/.password johannes | ||
+ | <!--T:51--> | ||
näin tehtiin käyttäjä | näin tehtiin käyttäjä | ||
− | == | + | === Pakkaaminen === <!--T:52--> |
− | + | <!--T:53--> | |
+ | Verkkosivut kannattaa pakata ennen lähettämistä, sillä se säästää kaistaa ja aikaa. | ||
+ | |||
+ | <!--T:54--> | ||
+ | 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; | ||
+ | |||
+ | <!--T:55--> | ||
+ | Tarkempi ohje Nginx sivuilla: http://nginx.org/en/docs/http/ngx_http_gzip_module.html | ||
+ | |||
+ | <!--T:56--> | ||
+ | Testaa onko verkkosivu pakattu: http://nginx.org/en/docs/http/ngx_http_gzip_module.html | ||
+ | |||
+ | === Suojaaminen === <!--T:57--> | ||
+ | |||
+ | <!--T:58--> | ||
+ | Estä Nginx version lähettäminen | ||
+ | |||
+ | <!--T:59--> | ||
+ | Avaa Nginx konfigurointi tiedosto | ||
+ | |||
+ | <!--T:60--> | ||
+ | nano /etc/nginx/nginx.conf | ||
+ | |||
+ | <!--T:61--> | ||
+ | ja muuta server-tokens arvoksi off. | ||
+ | |||
+ | <!--T:62--> | ||
+ | server_tokens off; | ||
+ | |||
+ | <!--T:63--> | ||
+ | Estä tietyt User-agentit ja hakukonebotit: | ||
+ | |||
+ | <!--T:64--> | ||
+ | Avaa sites-enabled sivuston konfiguroinnit ja lisää server { alle. | ||
+ | |||
+ | <!--T:65--> | ||
+ | ## Block download agenta | ||
+ | if ($http_user_agent ~* LWP::Simple|wget|libwww-perl) { | ||
+ | return 403; | ||
+ | } | ||
+ | |||
+ | <!--T:66--> | ||
+ | ## Block some nasty robots | ||
+ | if ($http_user_agent ~ (msnbot|Purebot|Baiduspider|Lipperhey|Mail.Ru|scrapbot) ) { | ||
+ | return 403; | ||
+ | } | ||
+ | |||
+ | <!--T:67--> | ||
+ | Estä spämmit | ||
+ | |||
+ | <!--T:68--> | ||
+ | ## Deny referal spam | ||
+ | if ( $http_referer ~* (jewelry|viagra|nude|girl|nudit|casino|poker|porn|sex|teen|babes) ) { | ||
+ | return 403; | ||
+ | } | ||
+ | |||
+ | <!--T:69--> | ||
+ | Estä maakohtaisesti: | ||
+ | |||
+ | <!--T:70--> | ||
+ | Sinun tulee ladata tietokanta ja purkaa pakattu gz tiedosto. | ||
+ | |||
+ | <!--T:71--> | ||
+ | http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz | ||
+ | |||
+ | <!--T:72--> | ||
+ | ja siirää sitten nginx hakemistoon sekä määrittää /etc/nginx/nginx.conf tiedostoon: | ||
+ | |||
+ | <!--T:73--> | ||
+ | geoip_country /etc/nginx/GeoIP.dat; | ||
+ | |||
+ | <!--T:74--> | ||
+ | ja lisätä sitten sivusi konfiguraatioon maat jotka estetään. Esimerkissä on Kiina, Korea ja Yhdistyneet Kuningaskunnat (Iso-Britannia) | ||
+ | |||
+ | <!--T:75--> | ||
+ | if ($geoip_country_code ~ (CN|KR|UK) ) { | ||
+ | return 403; | ||
+ | } | ||
+ | |||
+ | <!--T:76--> | ||
+ | Estä suoralinkitys sivustosi materiaaliin. Vaihda mywebsite.com omaksi domainiksi. | ||
+ | |||
+ | <!--T:77--> | ||
+ | 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ä. | ||
+ | |||
+ | <pre> | ||
+ | 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; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | == PHP asennus == <!--T:78--> | ||
+ | |||
+ | <!--T:79--> | ||
+ | Asenna PHP5-fpm paketti pakettihallinnasta | ||
+ | |||
+ | <!--T:80--> | ||
+ | apt-get install php5-fpm | ||
+ | |||
+ | <!--T:81--> | ||
Aptitude komento ei toimi Nginx kanssa. | Aptitude komento ei toimi Nginx kanssa. | ||
− | nano /etc/php5/fpm/php.ini | + | <!--T:82--> |
+ | nano /etc/php5/fpm/php.ini | ||
− | Etsi rivi cgi.fix_pathinfo=1 ja muokkaa 1 -> 0. | + | <!--T:83--> |
+ | Etsi rivi cgi.fix_pathinfo=1 ja muokkaa 1 -> 0. | ||
+ | <!--T:84--> | ||
Lisää seuraava rivi ''/etc/nginx/mime.types'' tiedostoon: | Lisää seuraava rivi ''/etc/nginx/mime.types'' tiedostoon: | ||
− | text/php php php5; | + | <!--T:85--> |
+ | text/php php php5; | ||
+ | <!--T:86--> | ||
Lisää tämä ''/etc/nginx/sites-enabled/default'' tiedostoon: | Lisää tämä ''/etc/nginx/sites-enabled/default'' tiedostoon: | ||
− | server { | + | <!--T:87--> |
+ | server { | ||
... | ... | ||
index index.html index.htm index.php; | index index.html index.htm index.php; | ||
Rivi 145: | Rivi 372: | ||
} | } | ||
+ | <!--T:88--> | ||
Luo .php tiedosto, esim. index.php ja lisää sinne seuraava rivi: | Luo .php tiedosto, esim. index.php ja lisää sinne seuraava rivi: | ||
− | <?php phpinfo (); ?> | + | <!--T:89--> |
+ | <?php phpinfo (); ?> | ||
+ | <!--T:90--> | ||
Avaa selain ja suuntaa palvelimesi IP-osoitteeseen ja sinulle pitäisi tulostua tietoa PHP:stä | Avaa selain ja suuntaa palvelimesi IP-osoitteeseen ja sinulle pitäisi tulostua tietoa PHP:stä | ||
− | + | [[Luokka:Linux|Nginx]] | |
+ | == HTTPS == <!--T:91--> | ||
+ | |||
+ | <!--T:92--> | ||
Lisää seuraava konfigurointi tiedostoosi: | Lisää seuraava konfigurointi tiedostoosi: | ||
− | server { | + | <!--T:93--> |
+ | <pre> | ||
+ | server { | ||
listen 443 ssl; | listen 443 ssl; | ||
server_name www.example.com; | server_name www.example.com; | ||
+ | ssl on; | ||
ssl_certificate www.example.com.crt; | ssl_certificate www.example.com.crt; | ||
ssl_certificate_key www.example.com.key; | ssl_certificate_key www.example.com.key; | ||
Rivi 164: | Rivi 400: | ||
... | ... | ||
} | } | ||
+ | </pre> | ||
+ | <!--T:94--> | ||
Muuta tästä SSL sertifikaatti tiedostojesi sijainti: | Muuta tästä SSL sertifikaatti tiedostojesi sijainti: | ||
+ | <!--T:95--> | ||
SSL sertifikaatti: | SSL sertifikaatti: | ||
ssl_certificate www.example.com.crt; | ssl_certificate www.example.com.crt; | ||
Rivi 173: | Rivi 412: | ||
ssl_certificate_key www.example.com.key; | ssl_certificate_key www.example.com.key; | ||
− | === SSL Chipper === | + | === SSL Chipper === <!--T:96--> |
+ | <!--T:97--> | ||
Yksinkertainen SSL: | Yksinkertainen SSL: | ||
− | ssl_ciphers 'AES256+EECDH:AES256+EDH'; | + | <!--T:98--> |
+ | ssl_ciphers 'AES256+EECDH:AES256+EDH'; | ||
+ | <!--T:99--> | ||
Suosittu yhteensopivuuden kanssa: | Suosittu yhteensopivuuden kanssa: | ||
− | + | <!--T:100--> | |
− | + | <pre> | |
+ | 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'; | ||
+ | </pre> | ||
+ | |||
+ | [[Luokka:Linux|Nginx]] | ||
+ | |||
+ | === DH Param === <!--T:101--> | ||
+ | |||
+ | <!--T:102--> | ||
+ | Luo DH Param. Tämä vie hetken: | ||
+ | |||
+ | <!--T:103--> | ||
+ | sudo openssl dhparam 2048 -out /etc/ssl/dhparam.pem | ||
+ | |||
+ | <!--T:104--> | ||
+ | Avaa Nginx konfigurointi tiedosto sites-enabled hakemistosta ja liitä SSL konffeihin: | ||
+ | |||
+ | <!--T:105--> | ||
+ | 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: | |
− | server { | + | listen 443 ssl; -> listen 443 ssl http2; |
− | + | ||
+ | ja lataa konfiguraatio uudelleen | ||
+ | |||
+ | service nginx reload | ||
+ | |||
+ | [[Luokka:Linux|Nginx]] | ||
+ | |||
+ | === Esimerkki === <!--T:106--> | ||
+ | |||
+ | <!--T:107--> | ||
+ | <pre> | ||
+ | server { | ||
listen [::]:443 default_server; | listen [::]:443 default_server; | ||
Rivi 194: | Rivi 485: | ||
ssl_certificate /etc/ssl/cert/ca-bundle.pem; | ssl_certificate /etc/ssl/cert/ca-bundle.pem; | ||
− | ssl_ciphers 'AES256+ | + | 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_protocols TLSv1 TLSv1.1 TLSv1.2; | ||
ssl_session_cache shared:SSL:10m; | ssl_session_cache shared:SSL:10m; | ||
− | + | ssl_session_timeout 5m; | |
+ | |||
ssl_stapling on; | ssl_stapling on; | ||
ssl_stapling_verify on; | ssl_stapling_verify on; | ||
Rivi 207: | Rivi 499: | ||
ssl_dhparam /etc/ssl/certs/dhparam.pem; | ssl_dhparam /etc/ssl/certs/dhparam.pem; | ||
− | add_header Strict-Transport-Security max-age= | + | add_header Strict-Transport-Security "max-age=31536000"; |
− | add_header X-Frame-Options | + | add_header X-Frame-Options SAMEORIGIN; |
add_header X-Content-Type-Options nosniff; | add_header X-Content-Type-Options nosniff; | ||
+ | |||
root /var/www/; | root /var/www/; | ||
Rivi 216: | Rivi 509: | ||
} | } | ||
+ | </pre> | ||
+ | <!--T:108--> | ||
Uudelleenohjaus HTTP -> HTTPS | Uudelleenohjaus HTTP -> HTTPS | ||
− | return 301 https://$server_name$request_uri; | + | <!--T:109--> |
+ | return 301 https://$server_name$request_uri; | ||
+ | |||
+ | [[Luokka:Linux|Nginx]] | ||
− | == Uudelleenohjaus -> index.php == | + | == Uudelleenohjaus -> index.php == <!--T:110--> |
− | location / { | + | <!--T:111--> |
+ | location / { | ||
if (-f $request_filename) { | if (-f $request_filename) { | ||
expires 30d; | expires 30d; | ||
Rivi 233: | Rivi 532: | ||
} | } | ||
− | |||
+ | == 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 | ||
+ | |||
+ | <pre> | ||
+ | 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; | ||
+ | ... | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | [[Luokka:Linux|Nginx]] | ||
+ | |||
+ | == Lisätietoa == <!--T:112--> | ||
+ | |||
+ | <!--T:113--> | ||
https://www.omaserveri.info/virtuaalipalvelimen-luominen-nginxissa/ | https://www.omaserveri.info/virtuaalipalvelimen-luominen-nginxissa/ | ||
+ | <!--T:114--> | ||
https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts | https://www.digitalocean.com/community/tutorials/understanding-the-nginx-configuration-file-structure-and-configuration-contexts | ||
− | == Lähteet == | + | == Lähteet == <!--T:115--> |
+ | <!--T:116--> | ||
http://wiki.nginx.org/Install | http://wiki.nginx.org/Install | ||
+ | <!--T:117--> | ||
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 | https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 | ||
+ | <!--T:118--> | ||
https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html | https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html | ||
+ | |||
+ | <!--T:119--> | ||
+ | https://bjornjohansen.no/optimizing-https-nginx | ||
+ | |||
+ | </translate> |
Nykyinen versio 1. joulukuuta 2018 kello 10.52
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.
Sisällysluettelo
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/
Lähteet
https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html