h5ai 是一款 PHP 开发的强大的目录列表程序,详细安装教程请参考文章“Ubuntu 18.04手动安装h5ai”。有时候我们并不想所有内容都开放给用户,而是某个目录需要认证才能访问。 h5ai 本身不支持目录加密,因此需要配合 nginx 的认证功能以实现目录加密访问。本文详细介绍如何使用 nginx 为 h5ai 启用目录加密访问。以下操作是在 root 账号下进行的,非 root 账号需提升到 root 权限。

创建用户密码文件

使用如下命令创建用户密码文件,此命令执行后会在 /etc/nginx/ 目录下创建一个名为 .htpasswd 的隐藏文件,用来存放用户名及密码。注意,下述命令中的 user 修改为自己想用的用户名, your_passwd 修改为自己想用的密码:

printf "user:$(openssl passwd -crypt your_passwd)\n" >> /etc/nginx/.htpasswd

启用 nginx 认证功能

修改 h5ai 的虚拟主机配置文件,开启认证:

vim /etc/nginx/sites-available/h5ai

复制以下内容,将其粘贴到第一个 location 下方,本文加密目录以 Private 目录为例,将其修改为自己的实际目录:

location ~ ^/Private/.* {
        auth_basic "please login";
        auth_basic_user_file /etc/nginx/.htpasswd;
        autoindex on;
    }    

~ ^/Private/.* 代表 Private 目录访问需要密码,其他目录则不需要密码。如果要加密整个 h5ai 目录,则粘贴以下内容:

location / {
        auth_basic "please login";
        auth_basic_user_file /etc/nginx/.htpasswd;
        autoindex on;
    }    

修改后完整的虚拟主机配置文件如下:

server {
    listen 80;
    index index.php /_h5ai/public/index.php;   
    server_name  example.com; #将 example.com 修改为自己的域名
    
    root /var/www/h5ai;

    # individual nginx logs for this gitlab vhost
    access_log  /var/log/nginx/example.com_access.log; # 将 example.com 修改为自己的域名
    error_log   /var/log/nginx/example.com_error.log;  # 将 example.com 修改为自己的域名
        
    location /_h5ai/private {
        return 403;
    }

    location ~ ^/Private/.* {
        auth_basic "please login";
        auth_basic_user_file /etc/nginx/.htpasswd;
        autoindex on;
    }        
    
    location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }

    fastcgi_param HTTP_PROXY "";

    #fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass unix:/run/php/php7.1-fpm.sock;
    fastcgi_index index.php;

    include fastcgi_params;

    fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    fastcgi_param  PATH_INFO         $fastcgi_path_info;
    }
}

保存并退出,重载 nginx :

service nginx reload

此时再打开 h5ai ,访问 Private 目录就会弹出如下认证对话框,用户输入正确用户名和密码才能访问:
nginx-h5ai-passwd.png
通过以上步骤便可使用 nginx 为 h5ai 启用目录加密访问,本文结束。

文章目录