Kuinka asentaa Nginx virtuaalipalvelimilla ja SSL-varmenteella


Nginx (lyhenne sanoista Engine-x) on ilmainen, avoimen lähdekoodin, tehokas, suorituskykyinen ja skaalautuva HTTP- ja käänteinen välityspalvelin, posti- ja tavallinen TCP/UDP-välityspalvelin. Sitä on helppo käyttää ja konfiguroida yksinkertaisella määrityskielellä. Nginx on nyt suositeltava verkkopalvelinohjelmisto voimakkaasti ladattujen sivustojen virtalähteeksi skaalautuvuutensa ja suorituskyvynsä vuoksi.

Tässä artikkelissa käsitellään Nginxin käyttöä HTTP-palvelimena, sen määrittämistä palvelemaan verkkosisältöä ja nimipohjaisten virtuaalisten isäntien määrittämistä sekä SSL: n luomista ja asentamista suojatuille tiedonsiirroille, mukaan lukien itse allekirjoitettu varmenne Ubuntussa ja CentOS: ssa .

Kuinka asentaa Nginx-verkkopalvelin

Aloita ensin asentamalla Nginx-paketti virallisista arkistoista käyttämällä pakettien hallintaa kuvan osoittamalla tavalla.

------------ On Ubuntu ------------ 
$ sudo apt update 
$ sudo apt install nginx 

------------ On CentOS ------------
$ sudo yum update 
$ sudo yum install epel-release 
$ sudo yum install nginx 

Kun Nginx-paketti on asennettu, sinun on käynnistettävä palvelu toistaiseksi, sallittava se käynnistymään automaattisesti käynnistyshetkellä ja tarkastella sen tilaa seuraavilla komennoilla. Huomaa, että Ubuntussa se tulisi käynnistää ja ottaa käyttöön automaattisesti, kun paketti on määritetty valmiiksi.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

Tässä vaiheessa Nginx-verkkopalvelimen pitäisi olla toiminnassa, voit tarkistaa tilan netstat-komennolla.

$ sudo netstat -tlpn | grep nginx

Jos järjestelmässäsi on palomuuri käytössä, sinun on avattava portti 80 ja 443, jotta HTTP- ja HTTPS-liikenne voidaan sallia suorittamalla.

------------ On CentOS ------------
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw reload 

Ihanteellinen tapa testata Nginx-asennus ja tarkistaa, onko se käynnissä ja pystyykö palvelemaan verkkosivuja, avaamalla verkkoselain ja osoittamalla palvelimen IP-osoitetta.

http://Your-IP-Address
OR
http://Your-Domain.com

Toimiva asennus tulee osoittaa seuraavalla näytöllä.

Nginx-verkkopalvelimen määrittäminen

Nginxin määritystiedostot sijaitsevat hakemistossa /etc/nginx ja yleinen määritystiedosto sijaitsee osoitteessa /etc/nginx/nginx.conf sekä CentOS: lla että Ubuntulla.

Nginx koostuu moduuleista, joita ohjataan erilaisilla asetusvaihtoehdoilla, joita kutsutaan direktiiveiksi. Direktiivi voi olla joko yksinkertainen (lomakkeen nimessä ja arvoissa, jotka on päätetty ; ) tai lohko (sisältää lisäohjeita, jotka on liitetty {} -merkkiin). Ja ryhmädirektiiviä, joka sisältää muita direktiivejä, kutsutaan kontekstiksi.

Kaikki direktiivit on selitetty kattavasti projektin verkkosivuston Nginx-dokumentaatiossa. Voit katsoa siitä lisätietoja.

Perustalolla Nginxiä voidaan käyttää staattisen sisällön, kuten HTML- ja mediatiedostojen, tarjoamiseen erillisessä tilassa, jossa käytetään vain oletuspalvelinlohkoa (analoginen Apachen kanssa, jossa ei ole määritetty virtuaalisia isäntiä).

Aloitamme selittämällä lyhyesti kokoonpanorakenne pääkokoonpanotiedostossa.

 
$ sudo vim /etc/nginx/nginx.conf

Jos tarkastelet tätä Nginx-määritystiedostoa, kokoonpanorakenteen tulisi näkyä seuraavasti, ja tähän viitataan pääkontekstina, joka sisältää monia muita yksinkertaisia ja estäviä direktiivejä. Kaikki verkkoliikenne hoidetaan http-kontekstissa.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Seuraava on esimerkki Nginx-pääkonfigurointitiedostosta (/etc/nginx/nginx.conf), jossa yllä oleva http-lohko sisältää sisällysdirektiivin, joka kertoo Nginxille, mistä löytää verkkosivuston kokoonpanotiedostot (virtuaaliset isäntäkokoonpanot).

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Huomaa, että Ubuntusta löytyy myös ylimääräinen sisällytysdirektiivi (include/etc/nginx/sites-enabled/*;), jossa hakemisto/etc/nginx/sites-enabled/tallentaa symboleita sivustoon/etc/nginx/sites-available /, jotta sivustot voidaan ottaa käyttöön. Symbolilinkin poistaminen poistaa kyseisen sivuston käytöstä.

Asennuslähteen perusteella löydät oletussivustokokoonpanotiedoston osoitteesta /etc/nginx/conf.d/default.conf (jos olet asentanut virallisen NGINX-arkiston ja EPEL: n) tai/etc/nginx/sites-enabled/default (jos asensit Ubuntun arkistoista).

Tämä on esimerkki oletusarvoisesta nginx-palvelinlohkosta, joka sijaitsee testijärjestelmässä /etc/nginx/conf.d/default.conf.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Lyhyt selitys direktiiveistä yllä olevassa kokoonpanossa:

  • kuuntele: määrittää portin, jota palvelin kuuntelee.
  • palvelimen_nimi: määrittää palvelimen nimen, joka voi olla tarkka nimi, jokerimerkki tai säännöllinen lauseke.
  • juuri: määrittää hakemiston, josta Nginx palvelee verkkosivuja ja muita asiakirjoja.
  • hakemisto: määrittää toimitettavan hakemistotiedoston tyypin (tyypit).
  • sijainti: käytetään tiettyjen tiedostojen ja kansioiden pyyntöjen käsittelyyn.

Kun osoitat palvelimelle käyttämällä isäntänimeä localhost tai sen IP-osoitetta, se käsittelee pyynnön ja palvelee tiedostoa /var/www/html/index.html ja tallentaa tapahtuman heti pääsylokiinsa (/ var/log/nginx/access.log) vastauksella 200 (OK). Virheen sattuessa (epäonnistunut tapahtuma), se tallentaa viestin virhelokiin (/var/log/nginx/error.log).

Lisätietoja Nginx-kirjautumisesta saat artikkelista Mukautetun käyttöoikeuden tai virhelokimuotojen määrittäminen Nginxissä.

Oletusarvoisten lokitiedostojen sijasta voit määrittää mukautetut lokitiedostot eri verkkosivustoille, kuten tarkastelemme myöhemmin, osiossa\"Nimipohjaisten virtuaalisten isäntien (palvelinlohkojen) asettaminen".

Voit määrittää pääsyn verkkosivustoosi/sovellukseesi tai joihinkin sen osiin määrittämällä HTTP-perustodennuksen. Tätä voidaan käyttää pääasiassa rajoittamaan pääsyä koko HTTP-palvelimelle, yksittäisille palvelinlohkoille tai sijaintilohkoille.

Aloita luomalla tiedosto, joka tallentaa käyttöoikeustiedot (käyttäjänimi/salasana) htpasswd-apuohjelman avulla.

 
$ yum install httpd-tools		#RHEL/CentOS
$ sudo apt install apache2-utils	#Debian/Ubuntu

Lisätään esimerkiksi käyttäjän järjestelmänvalvoja tähän luetteloon (voit lisätä niin monta käyttäjää kuin mahdollista), jossa -c -vaihtoehtoa käytetään määrittämään salasanatiedosto ja -B salaamaan salasana. Kun painat [Enter], sinua pyydetään antamaan käyttäjän salasana:

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Määritetään sitten salasanatiedostolle oikeat oikeudet ja omistajuus (korvaa käyttäjä ja ryhmä nginx www-tiedoilla Ubuntussa).

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd
$ sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Kuten aiemmin mainitsimme, voit rajoittaa pääsyä verkkopalvelimellesi, yksittäiselle verkkosivustolle (käyttämällä sen palvelinlohkoa) tai tiettyyn hakemistoon tai tiedostoon. Tämän saavuttamiseksi voidaan käyttää kahta hyödyllistä direktiiviä:

  • auth_basic - ottaa käyttäjänimen ja salasanan tarkistuksen käyttöön\"HTTP Basic Authentication" -protokollalla.
  • auth_basic_user_file - määrittää tunnistetiedoston.

Esimerkkinä näytämme, kuinka salasana suojataan hakemisto/var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Tallenna nyt muutokset ja käynnistä Nginx-palvelu uudelleen.

$ sudo systemctl restart nginx 

Kun seuraavan kerran osoitat selaimesi yllä olevaan hakemistoon (http:// localhost/protected), sinua pyydetään antamaan kirjautumistunnuksesi (käyttäjänimen järjestelmänvalvoja ja valittu salasana).

Onnistuneen kirjautumisen avulla voit käyttää hakemiston sisältöä, muuten saat virheilmoituksen\"401 Authorization Required".

Nimipohjaisten virtuaalisten isäntien (palvelinlohkot) asentaminen Nginxiin

Palvelinkonteksti sallii useiden verkkotunnusten/sivustojen tallentamisen ja palvelemisen samasta fyysisestä koneesta tai virtuaalisesta yksityisestä palvelimesta (VPS). Useita palvelinlohkoja (edustavat virtuaalisia isäntiä) voidaan ilmoittaa jokaisen sivuston/toimialueen http-kontekstissa. Nginx päättää, mikä palvelin käsittelee pyynnön vastaanotetun pyyntöotsikon perusteella.

Esittelemme tämän käsitteen käyttämällä seuraavia dummy-verkkotunnuksia, jotka kukin sijaitsevat määritetyssä hakemistossa:

  • wearelinux-console.net - /var/www/html/wearelinux-console.net/
  • welovelinux.com - /var/www/html/welovelinux.com/

Määritä seuraavaksi kunkin sivuston hakemistoon tarvittavat oikeudet.

$ sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Luo nyt näyte index.html-tiedosto jokaisen public_html-hakemiston sisälle.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Luo seuraavaksi palvelinlohkon määritystiedostot kullekin hakemiston /etc/httpd/conf.d sisäiselle sivustolle.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
$ sudo vi /etc/nginx/conf.d/welovelinux.com.conf

Lisää seuraava palvelinlohkoilmoitus wearelinux-console.net.conf-tiedostoon.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Lisää seuraavaksi seuraava palvelinlohkoilmoitus welovelinux.com.conf-tiedostoon.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Jos haluat ottaa käyttöön viimeisimmät muutokset, käynnistä Nginx-verkkopalvelin uudelleen.

$ sudo systemctl restart nginx

ja Web-palvelimesi osoittaminen yllä oleviin osoitteisiin saa sinut näkemään näennäisverkkotunnusten pääsivut.

http://wearelinux-console.net
http://welovelinux.com

Tärkeää: Jos SELinux on käytössä, sen oletusasetukset eivät salli Nginxin käyttää tiedostoja tunnettujen valtuutettujen sijaintien ulkopuolella (kuten/etc/nginx kokoonpanoille,/var/log/nginx lokeille,/var/www/html verkkotiedostoille jne.).

Voit hoitaa tämän joko poistamalla SELinux käytöstä tai asettamalla oikean suojauskontekstin. Lisätietoja on tässä oppaassa: Nginxin ja Nginx Plussan käyttäminen SELinuxin kanssa Nginx Plus -sivustossa.

SSL: n asentaminen ja määrittäminen Nginxillä

SSL-varmenteet auttavat ottamaan käyttöön suojatun http (HTTPS) -sivustosi, mikä on välttämätöntä luotettavan/suojatun yhteyden luomiseksi loppukäyttäjien ja palvelimesi välille salaamalla sivustollesi, sivustoltasi tai sen sisällä lähetetyt tiedot.

Käsittelemme, miten luodaan ja asennetaan itse allekirjoitettu varmenne ja luodaan varmenteen allekirjoituspyyntö (CSR) SSL-varmenteen hankkimiseksi varmenneviranomaiselta (CA) käytettäväksi Nginxin kanssa.

Itse allekirjoitettuja varmenteita voidaan luoda vapaasti, ja ne ovat käytännössä hyviä testaustarkoituksiin ja vain sisäisiä lähiverkkopalveluja varten. Julkisille palvelimille on erittäin suositeltavaa käyttää varmentajan myöntämää varmentetta (esimerkiksi Let’s Encrypt) sen aitouden säilyttämiseksi.

Voit luoda itse allekirjoitetun varmenteen luomalla ensin hakemiston, johon varmenteet tallennetaan.

$ sudo mkdir /etc/nginx/ssl-certs/

Luo sitten itse allekirjoittamasi varmenne ja avain openssl-komentorivityökalulla.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Kuvailemme lyhyesti yllä olevassa komennossa käytettyjä vaihtoehtoja:

  • req -X509 - osoittaa, että luomme x509-varmenteen.
  • -solmut (NO DES) - tarkoittaa\"älä salaa avainta".
  • -days 365 - määrittää, kuinka monta päivää sertifikaatti on voimassa.
  • -avain rsa: 2048 - määrittää, että RSA-algoritmilla luotavan avaimen tulee olla 2048-bittinen.
  • -keyout /etc/nginx/ssl-certs/nginx.key - määrittää RSA-avaimen koko polun.
  • -out /etc/nginx/ssl-certs/nginx.crt - määrittää varmenteen koko polun.

Seuraavaksi avaa virtuaalisen isännän määritystiedosto ja lisää seuraavat rivit palvelinlohkon ilmoitukseen, joka kuuntelee porttia 443. Testataan virtuaalisella isäntätiedostolla /etc/nginx/conf.d/wearelinux-console.net.conf.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Lisää sitten ssl-direktiivi nginx-määritystiedostoon, sen pitäisi näyttää samanlaiselta kuin alla.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Käynnistä nyt Nginx uudelleen ja osoita selaimesi seuraavaan osoitteeseen.

https://www.wearelinux-console.net

Jos haluat ostaa SSL-varmenteen varmentajalta, sinun on luotava varmenteen allekirjoituspyyntö (CSR) kuvan mukaisesti.

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

Voit myös luoda CSR olemassa olevasta yksityisestä avaimesta.

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Sitten sinun on lähetettävä luotava CSR varmentajalle pyytämään CA: n allekirjoittaman SSL-varmenteen myöntämistä. Kun olet saanut sertifikaatin CA: lta, voit määrittää sen yllä esitetyllä tavalla.

Tässä artikkelissa olemme selittäneet, kuinka Nginx asennetaan ja määritetään; käsiteltiin, miten nimipohjainen virtuaalinen isännöinti asetetaan SSL: n avulla tiedonsiirron suojaamiseksi web-palvelimen ja asiakkaan välillä.

Jos sinulla on ollut takaiskuja nginx-asennus-/määritysprosessin aikana tai sinulla on kysyttävää tai kommentteja, käytä alla olevaa palautelomaketta päästäksesi meihin.