使用Nginx进行基本HTTP验证
本教程将介绍如何使用Nginx的基本HTTP身份验证来密码保护服务器或整个网站上的目录。 这是Nginx相当于使用.htaccess
/ .htpasswd的
Apache上的基本HTTP身份验证
。
1初步说明
我正在使用网站www.example.com
,其中包含文件根/var/www/www.example.com/web/
和Nginx vhost配置文件/etc/nginx/sites-enabled/www.example.com。虚拟主机
我想要密码保护的目录
是/var/www/www.example.com/web/test/
。
2创建密码文件
我们需要一个密码文件,其中应该能够登录的用户以他们的密码(加密形式)列出。 要创建这样的密码文件,我们可以使用Apache的htpasswd工具,也可以使用http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py中的Python脚本。
2.1使用Apache的htpasswd命令
如果要使用Apache的htpasswd
命令,请检查它是否存在于您的系统上:
which htpasswd
root@server1:~# which htpasswd /usr/bin/htpasswd root@server1:~#
如果你得到像上面这样的输出,一切都很好 - 已经安装了htpasswd
。 如果命令返回没有任何输出,您的系统上不存在htpasswd
,并且您必须安装它。 在Debian / Ubuntu上,它是apache2-utils
软件包的一部分,我们可以安装如下:
apt-get -y install apache2-utils
我想立即创建密码文件/var/www/www.example.com/.htpasswd
,并将用户falko
存储在其中(您可以给出任何您喜欢的名称的密码文件 - 没有必要命名.htpasswd
;我只是命名为.htpasswd
,因为这是密码文件在Apache下命名的方式):
htpasswd -c /var/www/www.example.com/.htpasswd falko
系统将要求您输入用户falko
的密码。 请注意, -c
开关使文件从头开始创建; 如果以前不存在,就会创建; 如果以前存在,它将被一个新的覆盖,所有来自旧文件的用户将丢失! 因此,如果要在不删除所有现有用户的情况下添加其他用户,请使用没有-c
开关的htpasswd
命令:
htpasswd /var/www/www.example.com/.htpasswd till
最后一个命令将用户添加到/var/www/www.example.com/.htpasswd
,以便我们现在拥有用户falko
, 直到
其中。
2.2使用htpasswd.py Python脚本
如果您不想或不能使用Apache的htpasswd
命令,可以使用http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py中的Python脚本。
我们将其下载到/ usr / local / bin
并使其可执行,如下所示:
cd /usr/local/bin wget http://trac.edgewall.org/export/14464/trunk/contrib/htpasswd.py chmod 755 /usr/local/bin/htpasswd.py
我想立即创建密码文件/var/www/www.example.com/.htpasswd
,并将用户falko
存储在其中(您可以给出任何您喜欢的名称的密码文件 - 没有必要命名.htpasswd
;我只是命名为.htpasswd
,因为这是密码文件在Apache下命名的方式):
htpasswd.py -c -b /var/www/www.example.com/.htpasswd falko falkossecret
请用falkossecret
替换用户falko
的密码。 请注意, -c
开关使文件从头开始创建; 如果以前不存在,就会创建; 如果以前存在,它将被一个新的覆盖,所有来自旧文件的用户将丢失! 因此,如果要在不删除所有现有用户的情况下添加其他用户,请使用不带-c
开关的htpasswd.py
命令:
htpasswd.py -b /var/www/www.example.com/.htpasswd till tillssecret
最后一个命令将用户添加到/var/www/www.example.com/.htpasswd
,以便我们现在拥有用户falko
, 直到
其中。
3配置Nginx
现在我们有我们的密码文件,我们只需要将它添加到服务器{}
容器中的/etc/nginx/sites-enabled/www.example.com.vhost
中的Nginx vhost配置中。
nano /etc/nginx/sites-enabled/www.example.com.vhost
因为我想要密码保护文档根目录下的测试
目录,所以我在这里使用location / test {}
(密码保护整个网站,你可以使用location / {}
):
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; } [...] }
之后重新加载Nginx:
service nginx reload
而已! 您现在可以在浏览器中访问测试
目录( http://www.example.com/test
),您将被要求输入用户名和密码:
如果您输入正确的用户名和密码,您将被授予访问权限:
否则,您将看到需要401授权的
错误消息:
4链接
- Nginx: http : //nginx.org/
- Nginx Wiki: http : //wiki.nginx.org/
htpasswd.py
Python脚本: http : //trac.edgewall.org/browser/trunk/contrib/htpasswd.py