插件窝 干货文章 如何使用Nginx实现HTTP基础认证

如何使用Nginx实现HTTP基础认证

Nginx 认证 htpasswd 配置 628    来源:    2025-04-20

使用Nginx实现HTTP基础认证

HTTP基础认证(Basic Authentication)是一种简单的用户名/密码认证机制,Nginx可以很方便地实现这种认证方式。下面是完整的配置步骤:

1. 创建密码文件

首先需要创建一个包含用户名和密码的文件,推荐使用htpasswd工具:

# 安装htpasswd工具(如果尚未安装)
# 在Debian/Ubuntu上:
sudo apt-get install apache2-utils

# 在CentOS/RHEL上:
sudo yum install httpd-tools

# 创建密码文件(首次创建用户)
sudo htpasswd -c /etc/nginx/.htpasswd username

# 添加更多用户(不要使用-c选项,否则会覆盖文件)
sudo htpasswd /etc/nginx/.htpasswd anotheruser

2. 配置Nginx

在Nginx配置文件中添加认证配置:

server {
    listen 80;
    server_name example.com;

    location / {
        auth_basic "Restricted Content";  # 认证提示信息
        auth_basic_user_file /etc/nginx/.htpasswd;  # 密码文件路径

        # 其他配置...
        root /var/www/html;
        index index.html;
    }
}

3. 测试并重载Nginx配置

# 测试配置是否正确
sudo nginx -t

# 重载Nginx配置
sudo systemctl reload nginx

高级配置选项

对特定路径禁用认证

location /public {
    auth_basic off;
}

对特定IP地址免除认证

location / {
    satisfy any;
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
    allow 192.168.1.100;  # 允许的IP
    deny all;             # 拒绝其他所有
}

结合SSL使用(推荐)

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

注意事项

  1. 基础认证的凭证是以Base64编码传输的,不是加密的,因此必须配合HTTPS使用
  2. 密码文件应存放在Web目录之外,并设置适当的权限: bash sudo chown root:www-data /etc/nginx/.htpasswd sudo chmod 640 /etc/nginx/.htpasswd
  3. 对于高安全性需求,考虑使用更安全的认证方式如OAuth或JWT

故障排除

  • 如果认证不工作,检查Nginx错误日志:/var/log/nginx/error.log
  • 确保密码文件路径正确且Nginx有读取权限
  • 确保auth_basic指令没有在其他地方被关闭

通过以上步骤,你就可以为Nginx网站添加基本的HTTP认证保护了。