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:
4 odkazy
- 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“.