前言

有时候我们需要对网站部分路径或者全路径进行认证加密,但是网站工程本身又没有认证功能,我们需要httpd或者nginx提供基础认证功能。在LAMP环境下,httpd提供的认证加密使用很方便,只需要在需要认证的路径增加一个.htaccess文件,里面对httpbase认证方式进行配置即可完成。对于nginx也是只需要增加路径匹配规则,在匹配到的规则中增加密码认证。

但是不是所有网站都可以使用此方式,在使用过程中有些工程如果配置基础认证会导致循环认证,无法进入网站。对于一些简单的网站工程,并且数据安全级别也不是特别高时推荐使用此种方式。

认证加密需求

我的各种服务中需要提供httpbase认证的方式的服务是由h5ai提供的网页目录下载服务,h5ai本身并不提供登录服务(可以配置全局登录,但无法做到部分路径),所以只能使用代理服务提供,也就是NPM需要对h5ai提供全局或者局部路径的认证加密。

数据安全性说明

此种认证方式适用于对于部分私密数据需要进行认证保护,有人会说既然是私密数据为什么还要放到公网,这种上面也说了,私密数据安全级别不是很高,但是又需要网页访问浏览的数据。所以提供基础验证,保证不是任何人轻易就可以访问即可。注意不要将重要数据使用此种方式,此种方式是可以使用暴力破解的,而且密码是可以反向解析的。

生成htpasswd文件

使用工具生成

linux环境下安装httpd-tools,使用apt或者dnf直接安装即可。安装完毕使用命令:htpasswd -c htpasswd username-c选项为生成新的htpasswd文件,只需要第一次使用-c选项,如果要增加多个用户去掉-c选项。命令运行结束会在当前目录生成htpasswd文件,此文件备份出来备用。

使用网页在线生成工具生成

这里推荐一个小工具合集网址,点击链接如图:

image-20250114094031219

输入用户名和密码点击生成,拷贝到htpasswd文件中。

将htpasswd文件放入docker镜像内部

因为我们NPM是用docker compose进行部署,安装方式参考:

NPMcompose.yaml文件如下:

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./stack/data/app:/data
      - ./stack/data/letsencrypt:/etc/letsencrypt
        #- ./stack/config/force-ssl.conf:/etc/nginx/conf.d/include/force-ssl.conf #特殊端口下需要映射,正常端口不需要.

可以看到我们将宿主机的./stack/data/app映射到镜像的/data目录,所以我们需要将上面生成的htpasswd放到宿主机的./stack/data/app目录即可映射到docker镜像内部,在镜像内部的绝对路径为/data/htpasswd

部署h5ai

我这里是用h5ai做演示,具体用途请根据自己实际情况使用。

使用docker compose部署h5ai

compose.yaml文件如下:

services:
  app:
    image: awesometic/h5ai:latest
    volumes:
      - ./stack/data/app:/h5ai
      - ./stack/config:/config
    ports:
      - 6681:80
    restart: unless-stopped
    hostname: nash5ai
    environment:
      - PUID=48
      - PGID=48
      - TZ=Asia/Shanghai
    networks:
      - default

networks:
  default:
    name: h5ai

可以看到配置比较简单,服务主目录为./stack/data/app,服务端口为6681

配置加密路径

比如我们要对h5ai下面的secure1secure2两个路径进行加密。在./stack/data/app目录下建立三个测试文件夹,secure1secure2public

目录结构如下:

.
├── compose.yaml
└── stack
    └── data
        └── app
            ├── public
            ├── secure1
            └── secure2

6 directories, 1 file

启动服务

docker compose up -d启动服务即可。

NPM增加代理配置

这个我们之前已经做过很多次了,轻车熟路这里就不过多进行描述,还是老样子我的测试环境使用hosts增加DNS解析:

192.168.8.80        testh5ai.zhangshuocauc.cn

对于正式环境需要在运营商增加公共DNS解析项。我这里使用testh5ai.zhangshuocauc.cn作为测试域名,NPM配置如图:

image-20250114100412286

image-20250114100433736

访问服务

浏览器输入域名进行访问即可,因为NPM配置的强制https,所以浏览器访问会自动跳转到https服务,如图:

image-20250114100551220

此时点击三个文件夹是都可以进行访问的,如果要对secure1secure2进行认证还需要继续配置。

NPM增加认证配置

全局认证配置

需要在NPM配置advanced中增加认证配置,其实就是nginx的配置。

auth_basic "please login!";
auth_basic_user_file /data/htpasswd;
autoindex on;

如图:

image-20250114101021746

增加后再次访问网站,需要输入用户名和密码才可以访问:

image-20250114101107692

对部分路径增加认证

对于部分路径就需要配置location了,配置如下:

 location ~ ^/(secure1|secure2)/.*
 {
        auth_basic "please login!";
        auth_basic_user_file /data/htpasswd;
        autoindex on;

        # Proxy!
        include conf.d/include/proxy.conf;
 }

增加到代理的advanced中,如图:

image-20250114101847006

再次访问只是访问secure1secure2文件夹才需要进行验证。

结语

在前面nextcloud部署中


使用了NPM的路径重写功能,此篇补充了使用NPM全部路径部分路径增加基础认证的方法,对于NPM的使用其实本质还是nginx,对于自定义部分写入到advanced配置中即可。使用NPM要比直接使用nginx配置要方便很多。但是在NPM的安装文章最后

也描述了NPM的使用不足的情况。

因为考虑到NPM的不足,NPM在使用中只是起到了一个过渡的过程,在我使用的周期里面只存在了很短的一段时间。所以本篇也将是NPM相关使用的最终篇。后面将全部使用traefik网关作为代理,不再使用配置的形式,而是使用服务自动发现。对对象角度实现转换。

总结

本篇描述了NPM如何对网站进行基础认证的配置,并顺带描述了docker compose部署h5ai的过程。最后也是说明了对traefik使用的期待。

--EOF

最后修改:2025 年 01 月 14 日
如果觉得我的文章对你有用,请随意赞赏