Jinsi ya kusakinisha Nginx na Majeshi Virtual na Cheti cha SSL


Nginx (kifupi cha Engine-x) ni chanzo huria, wazi, chenye nguvu, utendakazi wa hali ya juu na HTTP inayoweza kupanuka na seva mbadala ya kubadili nyuma, barua pepe na seva mbadala ya TCP/UDP. Ni rahisi kutumia na kusanidi, kwa lugha rahisi ya usanidi. Nginx sasa ndiyo programu inayopendelewa ya seva ya wavuti kwa kuwezesha tovuti zilizopakiwa sana, kwa sababu ya uboreshaji na utendakazi wake.

Katika nakala hii itajadili jinsi ya kutumia Nginx kama seva ya HTTP, kuisanidi ili kutumikia yaliyomo kwenye wavuti, na kusanidi wapangishi wa kawaida wa majina, na kuunda na kusakinisha SSL kwa upitishaji salama wa data, pamoja na cheti cha kujiandikisha kwenye Ubuntu na CentOS. .

Jinsi ya kufunga Seva ya Wavuti ya Nginx

Kwanza anza kwa kusakinisha kifurushi cha Nginx kutoka kwa hazina rasmi kwa kutumia meneja wa kifurushi chako kama inavyoonyeshwa.

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

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

Baada ya kifurushi cha Nginx kusakinishwa, unahitaji kuanza huduma kwa sasa, uwezeshe kuanza kiotomatiki wakati wa kuwasha na kutazama hali yake, kwa kutumia amri zifuatazo. Kumbuka kuwa kwenye Ubuntu, inapaswa kuanzishwa na kuwezeshwa kiotomatiki wakati kifurushi kimesanidiwa mapema.

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

Kwa wakati huu, seva ya wavuti ya Nginx inapaswa kuwa juu na kufanya kazi, unaweza kuthibitisha hali hiyo kwa amri ya netstat.

$ sudo netstat -tlpn | grep nginx

Ikiwa mfumo wako umewasha ngome, unahitaji kufungua mlango 80 na 443 ili kuruhusu trafiki ya HTTP na HTTPS mtawalia, kupitia kwayo, kwa kuendesha.

------------ 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 

Njia bora ya kujaribu usakinishaji wa Nginx na kuangalia ikiwa inaendeshwa na inaweza kuhudumia kurasa za wavuti ni kwa kufungua kivinjari cha wavuti na kuashiria IP ya seva.

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

Ufungaji wa kufanya kazi unapaswa kuonyeshwa na skrini ifuatayo.

Jinsi ya kusanidi Seva ya Wavuti ya Nginx

Faili za usanidi za Nginx ziko katika saraka /etc/nginx na faili ya usanidi ya kimataifa iko kwenye /etc/nginx/nginx.conf kwenye CentOS na Ubuntu.

Nginx imeundwa na moduli ambazo zinadhibitiwa na chaguzi mbalimbali za usanidi, zinazojulikana kama maagizo. Maagizo yanaweza kuwa rahisi (katika fomu ya jina na thamani zilizokatishwa na ;) au kizuizi ( kina maagizo ya ziada yaliyoambatanishwa kwa kutumia {}). Na maagizo ya kuzuia ambayo yana maagizo mengine huitwa muktadha.

Maagizo yote yameelezewa kwa kina katika hati za Nginx kwenye wavuti ya mradi. Unaweza kurejelea kwa habari zaidi.

Katika kiwango cha msingi, Nginx inaweza kutumika kutoa maudhui tuli kama vile HTML na faili za midia, katika hali ya pekee, ambapo kizuizi chaguomsingi pekee cha seva kinatumika (kinachofanana na Apache ambapo hakuna seva pangishi pepe ambazo zimesanidiwa).

Tutaanza kwa kuelezea kwa ufupi muundo wa usanidi katika faili kuu ya usanidi.

 
$ sudo vim /etc/nginx/nginx.conf

Ukiangalia faili hii ya usanidi wa Nginx, muundo wa usanidi unapaswa kuonekana kama ifuatavyo na hii inajulikana kama muktadha mkuu, ambao una maagizo mengine mengi rahisi na ya kuzuia. Trafiki yote ya wavuti inashughulikiwa katika muktadha wa http.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Ifuatayo ni sampuli kuu ya usanidi wa Nginx (/etc/nginx/nginx.conf), ambapo kizuizi cha http hapo juu kina maagizo ya pamoja ambayo huambia Nginx mahali pa kupata faili za usanidi wa tovuti (mipangilio ya seva pangishi).

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;
}

Kumbuka kuwa kwenye Ubuntu, utapata pia maagizo ya ziada (pamoja na /etc/nginx/sites-enabled/*;), ambapo saraka /etc/nginx/sites-enabled/ huhifadhi ulinganifu kwa faili za usanidi wa tovuti iliyoundwa ndani/nk/nginx/tovuti zinazopatikana/, ili kuwezesha tovuti. Na kufuta ulinganifu huzima tovuti hiyo mahususi.

Kulingana na chanzo chako cha usakinishaji, utapata faili chaguo-msingi ya usanidi wa tovuti kwenye /etc/nginx/conf.d/default.conf (ikiwa ulisakinisha kutoka kwa hazina rasmi ya NGINX na EPEL) au /etc/nginx/sites-enabled/default (ikiwa umesakinisha kutoka kwa hazina za Ubuntu).

Hiki ni sampuli yetu chaguo-msingi ya seva ya nginx iliyoko /etc/nginx/conf.d/default.conf kwenye mfumo wa majaribio.

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

Maelezo mafupi ya maagizo katika usanidi hapo juu:

  • sikiliza: inabainisha mlango ambao seva inasikiliza.
  • server_name: inafafanua jina la seva ambalo linaweza kuwa majina kamili, majina ya kadi-mwitu, au maneno ya kawaida.
  • mizizi: inabainisha saraka ambayo Nginx itatumia kurasa za wavuti na hati zingine.
  • faharasa: hubainisha aina ya(za) za faili za faharasa zitakazotolewa.
  • mahali: hutumika kuchakata maombi ya faili na folda mahususi.

Kutoka kwa kivinjari cha wavuti, unapoelekeza kwa seva kwa kutumia jina la mwenyeji au anwani yake ya IP, huchakata ombi na kutumikia faili /var/www/html/index.html, na mara moja huhifadhi tukio kwenye logi yake ya ufikiaji (/ var/log/nginx/access.log) na jibu 200 (Sawa). Katika kesi ya hitilafu (tukio lililoshindwa), hurekodi ujumbe katika kumbukumbu ya makosa (/var/log/nginx/error.log).

Ili kupata maelezo zaidi kuhusu kuingia kwa Nginx, unaweza kurejelea Jinsi ya Kusanidi Ufikiaji Maalum au Fomati za Ingia za Hitilafu katika Nginx.

Badala ya kutumia faili chaguo-msingi za kumbukumbu, unaweza kufafanua faili maalum za kumbukumbu za tovuti tofauti, kama tutakavyoangalia baadaye, chini ya sehemu ya \kuweka seva pangishi zinazotegemea majina (vizuizi vya seva).

Ili kuzuia ufikiaji wa tovuti/programu yako au baadhi ya sehemu zake, unaweza kusanidi uthibitishaji msingi wa HTTP. Hii inaweza kutumika kimsingi kuzuia ufikiaji wa seva nzima ya HTTP, vizuizi vya seva binafsi au vizuizi vya eneo.

Anza kwa kuunda faili ambayo itahifadhi kitambulisho chako cha ufikiaji (jina la mtumiaji/nenosiri) kwa kutumia matumizi ya htpasswd.

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

Kama mfano, hebu tuongeze msimamizi wa mtumiaji kwenye orodha hii (unaweza kuongeza watumiaji wengi iwezekanavyo), ambapo chaguo la -c linatumika kubainisha faili ya nenosiri, na -B ili kusimba nenosiri. Mara tu unapogonga [Enter], utaulizwa kuingiza nenosiri la watumiaji:

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

Kisha, hebu tupe ruhusa sahihi na umiliki kwa faili ya nenosiri (badilisha mtumiaji na kikundi nginx na www-data kwenye Ubuntu).

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

Kama tulivyotaja hapo awali, unaweza kuzuia ufikiaji wa seva yako ya wavuti, tovuti moja (kwa kutumia kizuizi chake cha seva) au saraka au faili maalum. Maagizo mawili muhimu yanaweza kutumika kufanikisha hili:

  • auth_basic - huwasha uthibitishaji wa jina la mtumiaji na nenosiri kwa kutumia \itifaki ya Uthibitishaji Msingi wa HTTP.
  • auth_basic_user_file - hubainisha faili ya kitambulisho.

Kama mfano, tutaonyesha jinsi ya kulinda saraka /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;
    }
}

Sasa, hifadhi mabadiliko na uanze upya huduma ya Nginx.

$ sudo systemctl restart nginx 

Wakati mwingine utakapoelekeza kivinjari chako kwenye saraka iliyo hapo juu (http://localhost/protected) utaulizwa kuingiza kitambulisho chako cha kuingia (msimamizi wa jina la mtumiaji na nenosiri ulilochagua).

Kuingia kwa mafanikio hukuruhusu kufikia yaliyomo kwenye saraka, vinginevyo utapata hitilafu ya \Uidhinishaji 401 Unahitajika.

Jinsi ya Kusanidi Vipangishi Vinavyotegemea Jina (Vizuizi vya Seva) katika Nginx

Muktadha wa seva huruhusu vikoa/tovuti nyingi kuhifadhiwa ndani na kutumiwa kutoka kwa mashine moja halisi au seva pepe ya faragha (VPS). Vizuizi vingi vya seva (vinawakilisha wapangishi pepe) vinaweza kutangazwa ndani ya muktadha wa http kwa kila tovuti/kikoa. Nginx huamua ni seva gani huchakata ombi kulingana na kichwa cha ombi kinachopokea.

Tutaonyesha wazo hili kwa kutumia vikoa vifuatavyo vya dummy, kila moja iko kwenye saraka maalum:

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

Ifuatayo, toa ruhusa zinazofaa kwenye saraka kwa kila tovuti.

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

Sasa, unda sampuli index.html faili ndani ya kila public_html saraka.

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

Ifuatayo, unda faili za usanidi wa kuzuia seva kwa kila tovuti ndani ya saraka /etc/httpd/conf.d.

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

Ongeza tamko lifuatalo la kuzuia seva katika faili ya wearlinux-console.net.conf.

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;
        }
     
}

Kisha, ongeza tamko lifuatalo la kuzuia seva katika faili ya welovelinux.com.conf.

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

Ili kutumia mabadiliko ya hivi majuzi, anzisha tena seva ya wavuti ya Nginx.

$ sudo systemctl restart nginx

na kuelekeza seva yako ya wavuti kwa anwani zilizo hapo juu inapaswa kukufanya uone kurasa kuu za vikoa vya dummy.

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

Muhimu: Ikiwa umewezesha SELinux, usanidi wake chaguo-msingi hauruhusu Nginx kufikia faili nje ya maeneo yaliyoidhinishwa (kama vile /etc/nginx kwa usanidi, /var/log/nginx kwa kumbukumbu, /var/www/html kwa faili za wavuti nk ..).

Unaweza kushughulikia hili kwa kuzima SELinux, au kuweka muktadha sahihi wa usalama. Kwa habari zaidi, rejelea mwongozo huu: kwa kutumia Nginx na Nginx Plus na SELinux kwenye tovuti ya Nginx Plus.

Jinsi ya Kufunga na Kusanidi SSL na Nginx

Vyeti vya SSL husaidia kuwezesha http salama (HTTPS) kwenye tovuti yako, ambayo ni muhimu ili kuanzisha muunganisho unaoaminika/salama kati ya watumiaji wa mwisho na seva yako kwa kusimba maelezo ambayo yanatumwa, kutoka, au ndani ya tovuti yako.

Tutashughulikia jinsi ya kuunda na kusakinisha cheti cha kujiandikisha, na kutoa ombi la kutia saini cheti (CSR) ili kupata cheti cha SSL kutoka kwa mamlaka ya cheti (CA), ili kutumia na Nginx.

Vyeti vya kujiandikisha vinaundwa bila malipo na ni vyema kwa madhumuni ya majaribio na kwa huduma za ndani za LAN pekee. Kwa seva zinazotazamana na umma, inashauriwa sana kutumia cheti kilichotolewa na CA (kwa mfano Let's Encrypt) ili kudumisha uhalali wake.

Ili kuunda cheti cha kujiandikisha, kwanza unda saraka ambapo vyeti vyako vitahifadhiwa.

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

Kisha toa cheti chako kilichosainiwa na ufunguo kwa kutumia zana ya mstari wa amri ya openssl.

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

Wacha tueleze kwa ufupi chaguzi zinazotumiwa katika amri hapo juu:

  • req -X509 - inaonyesha kuwa tunaunda cheti cha x509.
  • -nodi (NO DES) - inamaanisha \usisimba ufunguo kwa njia fiche.
  • -siku 365 - hubainisha idadi ya siku ambazo cheti kitakuwa halali kwake.
  • -newkey rsa:2048 - inabainisha kuwa ufunguo unaozalishwa kwa kutumia algoriti ya RSA unapaswa kuwa 2048-bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key - hubainisha njia kamili ya ufunguo wa RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt - inabainisha njia kamili ya cheti.

Kisha, fungua faili yako ya usanidi ya seva pangishi na uongeze mistari ifuatayo kwa usikilizaji wa tamko la kuzuia seva kwenye mlango 443. Tutajaribu na faili pepe ya mwenyeji /etc/nginx/conf.d/wearlinux-console.net.conf.

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

Kisha ongeza maagizo ya ssl kwa faili ya usanidi ya nginx, inapaswa kuonekana sawa na hapa chini.

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;
        }

}

Sasa anzisha tena Nginx na uelekeze kivinjari chako kwa anwani ifuatayo.

https://www.wearelinux-console.net

Ikiwa ungependa kununua cheti cha SSL kutoka kwa CA, unahitaji kutoa ombi la kutia saini cheti (CSR) kama inavyoonyeshwa.

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

Unaweza pia kuunda CSR kutoka kwa ufunguo wa kibinafsi uliopo.

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

Kisha, unahitaji kutuma CSR ambayo imetolewa kwa CA ili kuomba utoaji wa cheti cha SSL kilichotiwa saini na CA. Mara tu unapopokea cheti chako kutoka kwa CA, unaweza kukisanidi kama inavyoonyeshwa hapo juu.

Katika makala hii, tumeelezea jinsi ya kufunga na kusanidi Nginx; inashughulikia jinsi ya kusanidi upangishaji pepe unaotegemea jina na SSL ili kulinda utumaji data kati ya seva ya wavuti na mteja.

Iwapo ulikumbana na vikwazo vyovyote wakati wa usakinishaji/usanidi wa nginx au una maswali au maoni yoyote, tumia fomu ya maoni iliyo hapa chini ili kuwasiliana nasi.