AppServer/

在 nginx 中使用 mysql 进行 http auth 用户认证

发布
修订
未修订
字数
380
阅读
1 分钟

若干年前写过在 apache 中使用 mysql 进行 http auth 用户认证https://www.barhe.org/archives/147。若干年后,有了 nginx 的场景,大致的研究了下,记录如下。

以 debian 12 为例,先安装 nginx,然后再安装 libpam-mysql、libnginx-mod-http-auth-pam。

bash
apt install nginx
apt install libpam-mysql
apt install libnginx-mod-http-auth-pam

安装好之后,写一个 pam 文件:

bash
cat /etc/pam.d/nginx-auth-mysql
auth required /usr/lib/x86_64-linux-gnu/security/pam_mysql.so user=db_user passwd=db_password host=localhost db=authdb table=users usercolumn=user_name passwdcolumn=user_password crypt=0 [where=host_group='nginx-test' and auth_by='nginx']
account required /usr/lib/x86_64-linux-gnu/security/pam_mysql.so user=db_user passwd=db_password host=localhost db=authdb table=users usercolumn=user_name passwdcolumn=user_password crypt=0 [where=host_group='nginx-test' and auth_by='nginx']

其中对应关系如下:
user: 连接数据库的用户名
passwd: 连接数据库的密码
host: 数据库地址
db: 数据库名
table: 表名
usercolumn: 表中的用户名字段
passwdcolumn: 表中的密码字段
crypt: 加密方式
where: 附加的验证条件

更详细的,可以看这儿:
https://github.com/NigelCunningham/pam-MySQL

然后修改 nginx 的站点文件,在 location 处加入如下内容:

bash
# 设置为 on 的时候,启用 pam 模块认证。设置为 off 的时候,禁用 pam 认证
auth_pam on;
# 在这引用 pam 的配置文件,默认在 /etc/pam.d/ 下面
auth_pam_service_name nginx-auth-mysql;

然后重启 nginx,再打开页面,确认没问题。

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑