配置 Nginx 输入用户名和密码才能访问

场景:一个外网访问地址,不希望对全部人可见,希望只有正确输入用户名、密码的人才能访问时,可以通过修改 Nginx 配置实现。

1. 检查 htpasswd 是否可用

我们会用到一个工具 htpasswd,主要用于对访问密码加密(注:千万不要直接存明文密码!!!),可使用以下命令检查是否已经安装:

1
2
sq@host01:~$ which htpasswd
/usr/bin/htpasswd

如果没有这个工具,需要先安装:

1
2
3
4
5
# Ubuntu
$ sudo apt-get install -y apache2-utils

# CentOS
$ yum -y install httpd-tools

2. 生成密钥文件

1
2
3
4
5
6
7
8
9
10
# /etc/nginx/.htpasswd 是生成的用户名、密码文件及存放路径。
# 根据自己的情况存放到一个合适位置,后面修改 Nginx 配置文件的时候会用到。
$ htpasswd -c /etc/nginx/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin

# 查看生成的文件内容如下
$ cat /etc/nginx/.htpasswd
admin:$apr1$pCPJOCsr$pyVB5i.K/CuUPHGeWm6XN1

3. 配置 Nginx 并重启

如下修改 Nginx 配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name demo.xxx.com; # 需要控制访问的域名
location / {
root /data/wwwroot/demo;
index index.htm index.html;

# ...

auth_basic "Restricted"; # 弹窗上的提示信息(有些浏览器不显示)
auth_basic_user_file /etc/nginx/.htpasswd; # 生成的用户名、密码文件

# ...
}
}

重启 Nginx,访问 demo.xxx.com 即可看到用户名、密码输入框。