web服务器(nginx、caddy)添加用户名密码认证

注意
本文最后更新于 2024-12-04,文中内容可能已过时。

以下内容抄袭于 https://www.himiku.com/archives/homepage.html

  1. 如果要在公网使用,加个密码比较安心。需要在 Ng­inx 中配置。
  2. 首先,在电脑或服务器上打开终端,假设你的密码是 yourpassword ,输入以下命令: openssl passwd -apr1 "yourpassword" 会输出以下内容: $ openssl passwd -apr1 "yourpassword" $apr1$9najWLRB$G0mgXBerNnt2/7W3mH6t4/
  3. 在 ng­inx 配置中新建一个 basicauth 文件夹,在其中创建一个 homepage.conf 文件,按 user:password 的格式填入以下内容: admin:$apr1$9najWLRB$G0mgXBerNnt2/7W3mH6t4/
  4. 接着,在上述 Ng­inx 配置中的 location 段加入 auth_basic_user_file 配置:

conf

location / {
    auth_basic_user_file basicauth/homepage.conf;
    auth_basic "请登录!";
    proxy_pass http://homepage:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_hide_header X-Powered-By;
    proxy_set_header HOST $http_host;
}
  1. 重载 Ng­inx 即可生效。
  2. 需要注意的是basicauth/homepage.conf为相当路径,在我的nginx的默认配置下他的觉得路径是/etc/nginx/basicauth/homepage.conf。你也可以在这里直接指定绝对路径。

以下内容来自 https://blog.powersee.top/2023/10/caddy-basicauth/ 在 shell 里执行

caddy hash-password

然后输入两次密码,它会帮我们生成 hash-password 字符串。 这里我输入 powersee 作为密码,输入密码的过程中不会显示

## caddy hash-password
Enter password:
Confirm password:
$2a$14$plaWtwb6sWHLMe/M6J9YqeOzbfabMeOaSm51gnHAegXpraaRyARLm

然后就得到了这样的字符串:$2a$14$plaWtwb6sWHLMe/M6J9YqeOzbfabMeOaSm51gnHAegXpraaRyARLm

这步的作用是通过哈希密码,来对密码进行加密。它的特点是「不可逆」,没法通过上面的字符串来反推我的密码。

而且,我再执行一次命令,依然使用 powersee 作为密码,得到的字符串和上次也不一样。

## caddy hash-password
Enter password:
Confirm password:
$2a$14$DDZ.pSpoDCjSLU6t4VCofer8kV/GMFRAiwlFLKQy2GR46/M26pvvy

获得这个加密的密码后,我们需要把它添加到 caddy 的配置文件 Caddyfile 里面。

我里面的内容原本是这样的

:80 {
root * /usr/share/caddy
file_server
}

修改后变成这样

:80 {
basicauth * {
admin $2a$14$rwVbmOSeXDBg16KT3w2FtOPRmskImqGPWBmHhtAHFDjelpDANl8Zq
}
root * /usr/share/caddy
file_server

}

也就是多添加了

basicauth * {
admin $2a$14$rwVbmOSeXDBg16KT3w2FtOPRmskImqGPWBmHhtAHFDjelpDANl8Zq
}

此时用户名是 admin,密码是后面的字符串,也就是之前的 powersee。

于是此时我通过 80 端口来访问这台服务器的话,会弹出一个窗口,然后输入用户名和密码,验证成功才能看到里面的内容。