偶然间知道 nginx 可以配置访问某些路径(比如 /files/xxx/secret)时需要密码验证, 这里做个记录怎么配置

一、生成密码文件

1.1 安装 htpasswd 工具

(Ubuntu/Debian)

sudo apt-get install apache2-utils

CentOS、RHEL 或类似的发行版上

sudo yum install httpd-tools

1.2 生成密码文件

htpasswd -c .pass user
  • .pass: 生成的密码文件的文件名
  • user: 验证登录时输入的用户名
  • 执行该命令后会要求输入两次验证的密码

二、修改 nginx 配置

在 1.2 步生成了 .pass 的文件, 假设我们将其放在了 /etc/nginx/pass 目录下

server {
    listen       443 ssl;
    server_name  example.com;
    
    ssl_certificate            /etc/nginx/certs/example.com/example.com_bundle.crt;
    ssl_certificate_key        /etc/nginx/certs/example.com/example.com.key;
    ssl_session_timeout        5m;
    ssl_session_cache          shared:SSL:10m;
    ssl_protocols              TLSv1.2 TLSv1.3;
    ssl_ciphers                ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers  on;
    
    location /files/xxx/download/ {
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/pass/.pass;
    }
}

server {
    listen      80;
    server_name example.com;

    return 301 https://$host$request_uri;
}