Nginx列出某个目录的文件 & 给某个目录加上密码验证

有时候需要将某个目录暴露出去,供给访问者访问,使用Nginx会很方便。但是有时也会有需求,避免某些目录(无密码)被所有人访问。

下面是可以参考的 Nginx 配置文件

Nginx-Login

普通配置

这个是一个普通的暴露配置

server {
        server_name  domain.com;        # 你的域名
        location / {
            alias  /var/www/xxx;        # 想要暴露的地址
            sendfile on;        # 不经过用户态缓冲区,直接发给访问,可以提高静态文件传输性能,减少 CPU 占用
            autoindex on;       # 没有index的目录,Nginx自动生成返回index
            autoindex_exact_size off;       # 让空间占用大小更加可读(on是字节)
            autoindex_localtime on;         # 文件时间格式,显示服务器的本地时间(off是GMT)
            charset utf-8,gbk;          # 返回内容的字符编码为 utf-8 和 gbk
        }
}

密码验证

安装插件与创建凭证

如果我们希望加上密码验证功能,就需要安装点额外的插件。

apt install apache2-utils

# 如果是 Yum 系的话,安装稍有不同
yum install httpd-tools

假如我们想要创建一个名为 test 的用户。

htpasswd -c /etc/nginx/.htpasswd test

此时,会要求你为 test 这个用户设置密码

完成后,在 /etc/nginx/ 目录下面,就会创建一个名为 .htpasswd 的文件。

追加用户:
如果你 希望追加用户,而不是覆盖它 ,创建新的文件, 那么就一定不要-c 参数。

删除用户:

htpasswd -D /etc/nginx/.htpasswd test
# 你也可以直接编辑 `/etc/nginx/.htpasswd` 这个文件,手动删除那一行

Nginx 追加配置

假设我们想要加密,/var/www/xxx/ 目录下的 adb 这个目录 (/var/www/xxx/adb)

之后,我们给我们的 Nginx 配置文件追加下面的内容即可

    location /adb/ {
        alias /var/www/xxx/adb;         # 具体目录
        auth_basic "Restricted Area";        # 浏览器弹窗提示信息,可以自定义
        auth_basic_user_file /etc/nginx/.htpasswd;  # 指定密码文件路径(刚刚创建那个)

        autoindex on;  # 启用目录列表功能
        autoindex_exact_size off;
        autoindex_localtime on;
        charset utf-8,gbk;
    }

完整配置

那么他们的完整配置就会是这样的

server {
    server_name  domain.com;  # 你的域名

    location / {
        alias  /var/www/xxx;
        sendfile on;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        charset utf-8,gbk;
    }

    # 为 adb 目录启用账号密码验证
    location /adb/ {
        alias /var/www/xxx/adb;  # adb 指向的具体目录
        auth_basic "Restricted Area";  # 浏览器弹窗提示信息
        auth_basic_user_file /etc/nginx/.htpasswd;  # 指定密码文件路径

        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        charset utf-8,gbk;
    }
}

完整配置的 精简写法

只需要,将公共部分提取出来放到上层 locationserver 块中,只保留每个 location 块的差异化配置:

server {
    server_name domain.com;  # 你的域名

    # 通用配置,适用于所有 location
    sendfile on;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    charset utf-8,gbk;

    # / 根路径 配置
    location / {
        alias /var/www/xxx;  # 想要暴露的地址
    }

    # adb 路径 启用账号密码验证
    location /adb/ {
        alias /var/www/xxx/adb;  # adb 指向的具体目录
        auth_basic "Restricted Area";  # 浏览器弹窗提示信息
        auth_basic_user_file /etc/nginx/.htpasswd;  # 指定密码文件路径
    }
}

Nginx-Index
Nginx-Auth


说明

算是 Nginx 常识了

    location /adb/ {        # 这里是自己取的,假如目录是 adb,这里是 xdb ,那么访问 domain.com/xdb ,其对应的目录其实是 adb。目录只与下面的 alias 有关。
        alias /var/www/xxx/adb;         # 具体目录
        ···

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注