web服务器(nginx、caddy)添加用户名密码认证
目录
注意
本文最后更新于 2024-12-04,文中内容可能已过时。
以下内容抄袭于 https://www.himiku.com/archives/homepage.html
1 密码登录
- 如果要在公网使用,加个密码比较安心。需要在 Nginx 中配置。
- 首先,在电脑或服务器上打开终端,假设你的密码是
yourpassword
,输入以下命令:openssl passwd -apr1 "yourpassword"
会输出以下内容:$ openssl passwd -apr1 "yourpassword" $apr1$9najWLRB$G0mgXBerNnt2/7W3mH6t4/
- 在 nginx 配置中新建一个
basicauth
文件夹,在其中创建一个homepage.conf
文件,按user:password
的格式填入以下内容:admin:$apr1$9najWLRB$G0mgXBerNnt2/7W3mH6t4/
- 接着,在上述 Nginx 配置中的
location
段加入auth_basic_user_file
配置:
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;
}
- 重载 Nginx 即可生效。
- 需要注意的是
basicauth/homepage.conf
为相当路径,在我的nginx的默认配置下他的觉得路径是/etc/nginx/basicauth/homepage.conf
。你也可以在这里直接指定绝对路径。
2 caddy添加密码验证
以下内容来自 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 端口来访问这台服务器的话,会弹出一个窗口,然后输入用户名和密码,验证成功才能看到里面的内容。