GNU/Linux >> Znalost Linux >  >> Linux

Základní HTTP autentizace s Nginx

Tento tutoriál ukazuje, jak můžete pomocí základního ověřování HTTP pomocí Nginx chránit heslem adresáře na vašem serveru nebo dokonce celý web. Toto je ekvivalent Nginx k základnímu ověřování HTTP na Apache pomocí .htaccess /.htpasswd.

1 předběžná poznámka

Zde používám web www.example.com s kořenem dokumentu /var/www/www.example.com/web/ a konfiguračním souborem Nginx vhost /etc/nginx/sites-enabled/www.example.com. vhost. Adresář, který chci chránit heslem, je /var/www/www.example.com/web/test/.

2 Vytvoření souboru s hesly

Potřebujeme soubor hesel, kde jsou uživatelé, kteří by měli mít možnost se přihlásit, uvedeni se svými hesly (v zašifrované podobě). K vytvoření takového souboru s hesly můžeme buď použít nástroj htpasswd Apache, nebo použít skript Python z http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

2.1 Použití příkazu htpasswd Apache

Pokud chcete použít příkaz htpasswd Apache, zkontrolujte, zda ve vašem systému existuje:

which htpasswd
[email protected]:~# which htpasswd
/usr/bin/htpasswd
[email protected]:~#

Pokud získáte výstup, jako je ten výše, je vše v pořádku - htpasswd je již nainstalován. Pokud se příkaz vrátí bez jakéhokoli výstupu, htpasswd ve vašem systému neexistuje a musíte jej nainstalovat. V Debianu/Ubuntu je součástí balíčku apache2-utils, který můžeme nainstalovat následovně:

apt-get -y install apache2-utils

Chci nyní vytvořit soubor s hesly /var/www/www.example.com/.htpasswd a uložit do něj uživatele falko (souboru s hesly můžete dát libovolný název - není nutné jej pojmenovat .htpasswd; právě to pojmenoval .htpasswd, protože to je způsob, jakým jsou soubory hesel pojmenovány pod Apache):

htpasswd -c /var/www/www.example.com/.htpasswd falko

Budete požádáni o heslo pro uživatele falko. Vezměte prosím na vědomí, že přepínač -c způsobí, že soubor bude vytvořen od začátku; pokud předtím neexistoval, bude vytvořen; pokud dříve existoval, bude přepsán novým a všichni uživatelé ze starého souboru budou ztraceni! Pokud tedy chcete přidat dalšího uživatele bez odstranění všech existujících uživatelů, použijte příkaz htpasswd bez přepínače -c:

htpasswd /var/www/www.example.com/.htpasswd till

Poslední příkaz přidá uživatele till do /var/www/www.example.com/.htpasswd, takže nyní v něm máme uživatele falko a till.

2.2 Použití skriptu htpasswd.py Python

Pokud nechcete nebo nemůžete použít příkaz htpasswd Apache, můžete použít skript Python z http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py.

Stáhneme jej do /usr/local/bin a uděláme jej spustitelným následovně:

cd /usr/local/bin
wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py
chmod 755 /usr/local/bin/htpasswd.py

Chci nyní vytvořit soubor s hesly /var/www/www.example.com/.htpasswd a uložit do něj uživatele falko (souboru s hesly můžete dát libovolný název - není nutné jej pojmenovat .htpasswd; právě to pojmenoval .htpasswd, protože to je způsob, jakým jsou soubory hesel pojmenovány pod Apache):

htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret

Nahraďte prosím falkossecret heslem pro uživatele falko. Vezměte prosím na vědomí, že přepínač -c způsobí, že soubor bude vytvořen od začátku; pokud předtím neexistoval, bude vytvořen; pokud dříve existoval, bude přepsán novým a všichni uživatelé ze starého souboru budou ztraceni! Pokud tedy chcete přidat dalšího uživatele bez odstranění všech existujících uživatelů, použijte příkaz htpasswd.py bez přepínače -c:

htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret

Poslední příkaz přidá uživatele till do /var/www/www.example.com/.htpasswd, takže nyní v něm máme uživatele falko a till.

3 Konfigurace Nginx

Nyní, když máme soubor s hesly na svém místě, stačí jej přidat do naší konfigurace Nginx vhost v /etc/nginx/sites-enabled/www.example.com.vhost, uvnitř kontejneru serveru {}.

nano /etc/nginx/sites-enabled/www.example.com.vhost

Protože chci chránit heslem testovací adresář v kořenovém adresáři dokumentu, používám zde umístění /test {} (k ochraně celého webu heslem byste použili umístění / {}):

server {
       listen 80;
       server_name www.example.com example.com;
       root /var/www/www.example.com/web;
[...]
       location /test {
                auth_basic "Restricted";
                auth_basic_user_file /var/www/www.example.com/.htpasswd;
       }
[...]
}

Poté znovu načtěte Nginx:

service nginx reload

A je to! Nyní můžete přejít do svého testovacího adresáře v prohlížeči (http://www.example.com/test) a měli byste být požádáni o uživatelské jméno a heslo:

Pokud zadáte správné uživatelské jméno a heslo, bude vám udělen přístup:

V opačném případě se zobrazí chybová zpráva 401 Vyžaduje autorizaci:

  • Nginx:http://nginx.org/
  • Nginx Wiki:http://wiki.nginx.org/
  • htpasswd.py Python Script:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py

O autorovi

Falko Timme je vlastníkem Timme Hosting (ultrarychlý webhosting nginx). Je hlavním správcem HowtoForge (od roku 2005) a jedním z hlavních vývojářů ISPConfig (od roku 2000). Přispěl také do O'Reillyho knihy „Linux System Administration“.


Linux
  1. Jak nainstalovat HTTP Git Server s Nginx na Ubuntu 16.04

  2. Přesměrování HTTP na HTTPS v NginX

  3. Https ověřování pomocí Axel Downloader?

  1. nginx - 413 entita požadavku je příliš velká

  2. Jak nastavit Nginx s podporou HTTP/2 na Debianu 9

  3. Základní řešení problémů s Nginx

  1. Jak nainstalovat HTTP Git Server s Nginx na Ubuntu 20.04

  2. Jak nainstalovat HTTP Git Server s Nginx na Debian 11

  3. Oprávnění souborů v Linuxu s příkladem