使用Nginx的基本HTTP身份验证

使用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链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏