Nginx 可以通过 HTTP 基本认证(Basic Authentication)来实现基于用户的访问控制。以下是完整的配置步骤:
首先需要使用 htpasswd
工具创建用户密码文件:
sudo htpasswd -c /etc/nginx/.htpasswd username1
-c
参数表示创建新文件(如果文件已存在则会覆盖)-c
参数:
bash
sudo htpasswd /etc/nginx/.htpasswd username2
如果没有 htpasswd
工具,可以安装 Apache 工具包:
# Ubuntu/Debian
sudo apt-get install apache2-utils
# CentOS/RHEL
sudo yum install httpd-tools
在 Nginx 配置文件中添加认证配置:
server {
listen 80;
server_name example.com;
location /protected/ {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# 其他配置...
}
}
或者对整个站点启用认证:
server {
listen 80;
server_name example.com;
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# 其他配置...
}
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx # 重载配置
location / {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /public/ {
auth_basic off;
}
location /admin/ {
satisfy any; # 满足任一条件即可
allow 192.168.1.0/24;
deny all;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /user/ {
auth_basic "User Area";
auth_basic_user_file /etc/nginx/.htpasswd_users;
}
location /admin/ {
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/.htpasswd_admins;
}
认证不生效:
密码文件权限问题:
sudo chown www-data:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd
查看 Nginx 错误日志:
tail -f /var/log/nginx/error.log
通过以上配置,您可以轻松地为 Nginx 网站或特定目录添加基于用户的访问控制。