Luo virtuaalisia isäntiä, salasanasuojattuja hakemistoja ja SSL-varmenteita käyttämällä "Nginx Web Server" -palvelinta Arch Linuxissa
Edellinen Arch Linux "LEMP" -artikkeli kattoi vain perusasioita verkkopalvelujen (Nginx, MySQL-tietokanta ja PhpMyAdmin) asentamisesta ja MySQL-palvelimen ja PhpMyadminin vaaditun vähimmäissuojauksen määrittämisestä.
Tämä aihe liittyy tiukasti LEMP:n aiempaan asennukseen Arch Linuxiin ja opastaa sinua määrittämään monimutkaisempia kokoonpanoja LEMP-pinolle, erityisesti Nginx-verkkopalvelinkokoonpanoihin, kuten luomaan virtuaalisia isäntiä. , käytä salasanalla suojattuja hakemistoja, luo ja määritä HTTP Secure Sockets Layer, suojaamattomat HTTP-uudelleenohjaukset HTTPS:ään ja esittelee myös hyödyllisiä Bash-komentotiedostoja, jotka helpottaa virtuaalipalvelinten aktivointia ja luo SSL-varmennetta ja avaimia.
Vaatimukset
Asenna LEMP MariaDB-tietokannan kanssa Arch Linuxiin
Vaihe 1: Ota virtuaalipalvelimet käyttöön Nginxissä
Yksi yksinkertaisimmista tavoista ottaa virtuaaliset isännät käyttöön on käyttää include-lauseita Nginx-pääasetustiedostossa, mikä tekee lisämäärityksistä yksinkertaisempaa ja tehokkaampaa, koska voit luoda yksinkertaisia tiedostoja. jokaiselle uudelle isännälle ja pidä pääasetustiedosto puhtaana.
Tämä lähestymistapa toimii samalla tavalla kuin Apache-verkkopalvelimessa. Ensimmäinen asia, joka sinun on tehtävä, on määrittää uusi URI-polku, jossa Nginxin tulee lukea tiedostokäskyt.
1. Avaa siis päätiedosto nginx.conf, joka sijaitsee järjestelmäpolussa /etc/nginx/ ja alareunassa ennen viimeistä kiharaa hakasulkua " }" lisää polku, jossa tulevat Virtual Host -määritystiedostot sijaitsevat.
sudo nano /etc/nginx/nginx.conf
Lisää alareunaan seuraava lausunto.
include /etc/nginx/sites-enabled/*.conf;
Tämä käsky kertoo Nginxille, että sen tulee lukea kaikki tiedostot, jotka löytyvät hakemistosta /etc/nginx/sites-enabled/ ja jotka päättyvät .conf-tunnisteeseen.
2. Seuraava vaihe on luoda sivustot-käyttöinen-hakemisto ja toinen, nimeltään sivustot-käytettävissä, johon tallennat kaikki Virtual Hosts -määrityksesi tiedostot.
sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled
3. Nyt on aika luoda uusi virtuaalipalvelin. Tässä esimerkissä käytetään järjestelmän IP-osoitetta virtuaalisena isäntänimenä, joten luo uusi tiedosto nimeltä nimi-ip.conf.
sudo nano /etc/nginx/sites-available/name-ip.conf
Lisää seuraava sisältö.
## File content ##
server {
listen 80;
server_name 192.168.1.33;
access_log /var/log/nginx/192.168.1.33.access.log;
error_log /var/log/nginx/192.168.1.33.error.log;
root /srv/http;
location / {
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
Virtual Hostin aktivoiva käsky on palvelimen_nimi kuunteluportissa. Toinen tärkeä ohje tässä on myös root-lause, joka osoittaa Nginx Virtual Hostin palvelemaan tiedostosisältöä järjestelmäpolusta /srv/http/.
4. Viimeinen vaihe on /srv/http/-hakemiston luominen ja name-ip.conf-tiedoston määrittäminen Nginx-lukua varten (käyttäen symbolinen linkki), käynnistä daemon uudelleen, jotta uudet kokoonpanot tulevat näkyviin.
sudo mkdir /srv/http/
sudo ln -s /etc/nginx/sites-available/name-ip.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx
5. Vahvista se osoittamalla selaimesi Arch-järjestelmän IP-osoitteeseen ja sinun pitäisi nähdä, että verkkosisältö on eri kuin http://localhost. Olen lisännyt tähän pienen php-skriptin, joka tarkistaa myös FastCGI PHP -kokoonpanot, kuten alla olevassa kuvakaappauksessa.
sudo nano /srv/http/info.php
## File content ##
<?php
phpinfo();
?>
6. Toinen menetelmä, jonka olen kehittänyt Virtual Hosts -palvelun käyttöön ottamiseksi tai poistamiseksi käytöstä Nginxissä, on tyylikkäämpi, ja se on saanut inspiraationsa Apachen a2eniste-skriptistä.
Käytä tätä menetelmää avaamalla tiedostoeditori ja luomalla $HOME-polullesi uusi tiedosto, nimeltä n2ensite, jossa on alla oleva sisältö, tee siitä suoritettava ja suorita se pääkäyttäjän oikeuksin. ja siirry vaihtoehtona uudelle virtuaalipalvelimellesi ilman .conf-päätettä (täytä vapaasti muokataksesi sitä tarpeidesi mukaan).
sudo nano n2ensite
## File content ##
#!/bin/bash
if test -d /etc/nginx/sites-available && test -d /etc/nginx/sites-enabled ; then
echo "-----------------------------------------------"
else
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
fi
avail=/etc/nginx/sites-available/$1.conf
enabled=/etc/nginx/sites-enabled/
site=`ls /etc/nginx/sites-available/`
if [ "$#" != "1" ]; then
echo "Use script: n2ensite virtual_site"
echo -e "\nAvailable virtual hosts:\n$site"
exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart nginx server: sudo systemctl restart nginx"
else
echo -e "Virtual host $avail does not exist!\nPlease see available virtual hosts:\n$site"
exit 0
fi
fi
Tee siitä suoritettava ja suorita se esityksenä.
sudo chmod +x n2ensite
sudo ./n2ensite your_virtual_host
7. Jos haluat poistaa Virtual Hostit käytöstä, luo uusi n2dissite-tiedosto, jossa on seuraava sisältö, ja käytä samoja asetuksia kuin yllä.
sudo nano n2dissite
## File content ##
#!/bin/bash
avail=/etc/nginx/sites-enabled/$1.conf
enabled=/etc/nginx/sites-enabled
site=`ls /etc/nginx/sites-enabled/`
if [ "$#" != "1" ]; then
echo "Use script: n2dissite virtual_site"
echo -e "\nAvailable virtual hosts: \n$site"
exit 0
else
if test -e $avail; then
sudo rm $avail
else
echo -e "$avail virtual host does not exist! Exiting!"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo -e "Success! $avail has been removed!\nPlease restart Nginx: sudo systemctl restart nginx"
exit 0
fi
fi
8. Nyt voit käyttää näitä kahta komentosarjaa minkä tahansa virtuaalipalvelimen käyttöön tai poistamiseen käytöstä, mutta jos haluat käyttää niitä järjestelmän laajuisina komentoina, kopioi molemmat komentosarjat hakemistoon /usr/local/bin/ ja sitten voit käyttää sitä polkua määrittämättä.
sudo cp n2ensite n2dissite /usr/local/bin/
Vaihe 2: Ota SSL käyttöön virtuaalipalvelinten kanssa Nginxissä
SSL (Secure Sockets Layer) on protokolla, joka on suunniteltu salaamaan HTTP-yhteyksiä verkkojen tai Internetin kautta, mikä mahdollistaa tiedonsiirron suojatun kanavan kautta käyttämällä symmetrisiä/esymmetrisiä salausavaimia. ja sen tarjoaa Arch Linuxissa OpenSSL-paketti.
sudo pacman -S openssl
9. Jotta voit ottaa HTTPS-yhteydet käyttöön Nginxin kanssa, sinun on ensin luotava Virtual Hosts -avaimia. Asioiden yksinkertaistamiseksi olen myös kehittänyt pienen skriptin, joka luo automaattisesti salausavaimet /etc/nginx/ssl-hakemistopolulle käyttäen Virtual Host -nimeämistä avainten niminä.
Luo tiedosto nimeltä nginx_gen_ssl ja lisää seuraava sisältö.
sudo nano nginx_gen_ssl
## File content ##
#!/bin/bash
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx SSL certificate!"
read cert
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt
echo -e " The certificate $cert has been generated!\nPlease link it to nginx ssl available website!"
ls -all /etc/nginx/ssl
exit 0
10. Kun komentosarja on luotu, liitä suoritusoikeudet, suorita se ja anna varmennevaihtoehdot, joista tärkein on Yleinen nimi -kenttä (lisää virallinen verkkotunnuksen nimi tähän) ja jätä Salasana- ja Valinnainen yritys -kentät tyhjiksi.
sudo chmod +x nginx_gen_ssl
sudo ./nginx_gen_ssl
Avainten luontitehtävän lopussa näytetään luettelo kaikista Nginx ssl -hakemistossa olevista avaimista.
Myös jos haluat, että tätä komentosarjaa käytetään järjestelmäkomentona, kopioi tai siirrä se osoitteeseen /usr/local/bin/.
sudo mv nginx_gen_ssl /usr/local/bin
11. Kun olemme luoneet Nginx SSL Virtual Hostia varten tarvittavat avaimet, on aika luoda SSL Virtual Host -määritystiedosto. Käytä Virtual Hostille samaa järjestelmän IP-osoitetta kuin yllä komennolla server_name, mutta muuta hieman Virtual Host -tiedoston nimeä lisäämällä ssl ennen .conf-osoitetta muistuttamaan, että tämä tiedosto tarkoittaa name-ip SSL Virtual Host.
sudo nano /etc/nginx/sites-availabe/name-ip-ssl.conf
Muuta tässä tiedostossa kuuntele porttilauseke muotoon 443 ssl ja anna SSL- ja varmenneavaintiedostojen polut aiemmin luotujen polkujen kanssa näyttämään alla olevan otteen kaltaisista.
## File content ##
server {
listen 443 ssl;
server_name 192.168.1.33;
ssl_certificate /etc/nginx/ssl/192.168.1.33.crt;
ssl_certificate_key /etc/nginx/ssl/192.168.1.33.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/192.168.1.33-ssl.access.log;
error_log /var/log/nginx/192.168.1.33-ssl.error.log;
root /srv/http;
location / {
index index.html index.htm index.php;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000; (depending on your php-fpm socket configuration)
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
12. Kun tiedosto on luotu, käytä n2ensite-komentosarjaa tai ln-komentoriviä sen aktivoimiseksi (luo tiedoston symbolisen linkin sivustoissa -enabled hakemistosta), käynnistä sitten Nginx-daemon uudelleen ottaaksesi asetukset käyttöön.
sudo ./n2ensite name-ip-ssl
OR
sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx
13. Osoita selaimessasi jälleen Arch IP URL, mutta tällä kertaa käyttämällä HTTPS-protokollaa – https://192.168.1.33 järjestelmässäni ja Ei-luotettava yhteys -suojausvirheen pitäisi ilmestyä ( Lisää ja vahvista suojauspoikkeus, jos haluat mennä pidemmälle sivulla).
Kuten nyt näet, Nginx Virtual Host palvelee samaa sisältöä kuin edellinen name-ip isäntä, mutta tällä kertaa käyttämällä suojattua HTTP-yhteyttä.
Vaihe 3: Käytä PhpMyAdminia Virtual Hostin kautta
Jos Virtual Host on käytössä Nginxissä, meillä ei ole enää pääsyä http://localhost-polun sisältöön (localhost palvelee yleensä sisältöä käyttämällä takaisinkytkentä-IP-osoitetta tai järjestelmän IP-osoitetta, jos sitä ei ole määritetty muuten), koska meillä on käytti Arch-järjestelmän IP-osoitetta palvelimen_nimenä, joten sisältöpolkumme on muuttunut.
14. Yksinkertaisin tapa päästä PhpMyAdminiin verkon kautta on luoda symbolinen linkki polun /usr/share/webapps/phpMyAdmin/ välille. ja uusi määritetty Virtual Host -polkumme (/srv/http).
sudo ln -s /usr/share/webapps/phpMyAdmin/ /srv/http/
15. Kun olet suorittanut yllä olevan komennon, päivitä sivusi ja näet uuden kansion phpMyAdmin, jos autoindex-lauseke on käytössä Nginx Virtual Hostissa tai osoita URL-osoite suoraan PhpMyAdmin-kansio https://arch_IP/phpMyAdmin.
16. Jos haluat puhdistaa phpMyAdmin-merkkijonon selaimessa, muokkaa Virtual Hosts -tiedostojasi ja lisää seuraava sisältö palvelinlohkoon.
location /phpmyadmin {
rewrite ^/* /phpMyAdmin last;
}
Vaihe 4: Ota salasanasuojattu hakemisto käyttöön Nginxissä
Toisin kuin Apache, Nginx käyttää HttpAuthBasic-moduulia ottaakseen käyttöön salasanalla suojatut hakemistot, mutta se ei tarjoa työkaluja salatun .htpasswd-tiedoston luomiseen.
17. Jos haluat saavuttaa hakemistosalasanan suojauksen Nginxillä Arch Linuxissa, asenna Apache-verkkopalvelin ja käytä sen työkaluja salatun .htaccess-tiedoston luomiseen.
sudo pacman -S apache
18. Kun olet asentanut Apachen, luo hakemistoon /etc/nginx/ uusi hakemisto nimeltään intuitively passwd, johon .htpasswd-tiedosto tallennetaan ja jota käytetään htpasswd-komento –c-kytkimellä on ensimmäinen lisätty käyttäjä luomaan tiedosto. Jos haluat lisätä käyttäjiä, käytä htpasswd-komentoa ilman – c -kytkin.
sudo mkdir /etc/nginx/passwd
sudo htpasswd -c /etc/nginx/passwd/.htpasswd first_user
sudo htpasswd /etc/nginx/passwd/.htpasswd second_user
sudo htpasswd /etc/nginx/passwd/.htpasswd third_user
19. Suojatakseen name-ip-ssl Virtual Host -juuren /srv/http/ polkua kaikkine alikansioineen ja tiedostoineen se lisää seuraavat ohjeet Virtual Host -palvelinlohkoon juuridirektiivin alaisena ja osoittaa sen absoluuttiseen .htpasswd-tiedostopolkuun.
auth_basic "Restricted Website";
auth_basic_user_file /etc/nginx/passwd/.htpasswd;
20. Kun olet käynnistänyt Nginx-palvelun uudelleen, päivitä sivu ja Todennus vaaditaan -ponnahdusikkunan pitäisi näkyä vaativan valtuustietojasi.
Nyt olet onnistuneesti ottanut käyttöön Nginxin salasanalla suojatut hakemistot, mutta muista, että samaan aikaan kun Apache-verkkopalvelin asennetaan järjestelmääsi, joten varmista, että se pysyy poissa käytöstä, äläkä missään tapauksessa käynnistä sitä, koska se voi johtaa portit, jotka ovat ristiriidassa Nginxin kanssa.
Vaihe 5: Ohjaa HTTP HTTPS:ään Nginxissä
21. Jos haluat, että selaimet uudelleenohjaavat automaattisesti kaikki suojaamattomat HTTP-pyynnöt HTTPS-protokollalle avautuvat ja muokkaavat, olet ei-ssl Virtual Host ja lisää seuraavat ohjeet kohtaan palvelimen_nimi.
rewrite ^ https://$server_name$request_uri? permanent;
Kaikki tässä artikkelissa esitetyt asetukset tehtiin Arch Linux -järjestelmässä, joka toimii palvelimena, mutta useimmat niistä, erityisesti Nginx-määritystiedostoja koskevat, ovat käytettävissä useimmissa Linux-järjestelmissä pienin eroin.