2024.4
使用 LobeChat 时出现 403 错误
发生时间: 2024年4月25日
表现
LobeChat 返回错误信息:
很抱歉,服务器拒绝了您的请求,您没有访问此内容的权限
{
"message": "Sorry, the server has rejected your request. You do not have permission to access this content.",
"type": 403
}
原因排查
在请求
https://mydomain.com/api/chat/${api_name}
的时候触发了 403 错误该 403 错误由 Nginx 的恶意请求拦截返回
请求中出现了
./data:/path/to/container/data
字样,触发了拦截规则data:/
导致
这是所使用的 Nginx 版本自带的默认恶意请求拦截内容,平时开发的时候都未曾留意这一环节
解决方案
修改 Nginx 恶意请求拦截配置
使用 Postgres 时有很多报错日志
发生时间: 2024年4月23日
表现
postgres 在 docker 中运行,执行下面的命令
docker logs ${container_name} --tail=100
发现存在大量的此类日志:
2024-04-25 09:06:15.014 UTC [986843] FATAL: role "root" does not exist
原因排查
导出日志
尝试将错误日志导出到本地,分析什么时候开始产生的:
docker logs ${container_name} >> pg.log
然后发现用处不大,导出的日志不完整,没有任何一行包含上面的报错。探索后发现,是只将 stdout 重定向到了文件,而报错内容在 stderr 中,更改命令导出:
docker logs ${container_name} >> pg.log >> 2&1
此次操作拿到的就是正常的完整日志了
原因分析
结合上下文分析,错误发生时间是容器创建时间附近,所以怀疑是配置文件有问题,而不是应用程序的问题,配置如下:
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: database
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: PASSWORD
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U root -d pg_db" ]
interval: 10s
timeout: 60s
retries: 5
start_period: 10s
volumes:
- /home/postgres/mnt/data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- postgres_network
networks:
postgres_network:
driver: bridge
上面的配置是从 zitadel
中复制粘贴的,问题出现在 healthcheck
中,在
test: [ "CMD-SHELL", "pg_isready -U root -d pg_db" ]
-U root
的意思是使用 root 用户-d pg_db
的意思是使用 pg_db 这一数据库
这两个默认值在启动的时候并没有更改,也没有创建对应的数据库用户和数据库,所以每十秒钟进行健康检查的时候都会产生错误
解决方案
修复错误的健康检查参数