Dokuwiki 超过22个用户时用户管理器502报错解决
当DokuWiki启用了[ldaplocal auth]方式认证,并且创建的用户超过22个时,再次打开用户管理器浏览器会收到Nginx返回的502 Bad Gateway报错。这个问题通常是由于Nginx的fastcgi缓存或头部缓冲区大小不足以处理从后端服务器(如PHP-FPM)接收到的响应头部。
Nginx错误日志
查看Nginx的日志,通常会发现如下错误信息:
2024/08/15 13:33:25 [error] 346#346: *974 upstream sent too big header while reading response header from upstream, client: xx.xx.xx.xx, server: _, request: "GET /doku.php?id=start&fn%5Bedit%5D%5Bliudq%5D=1&do=admin&page=usermanager§ok=f409bd9a15ee9e3cf67fb4f05d318255 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xx.xx.xx.xx:xxxx", referrer: "http://xx.xx.xx.xx:xxxx/doku.php?id=start&do=admin&page=usermanager"
解决方案
1. 定位Nginx配置文件
首先,查看Nginx的配置文件(通常是nginx.conf
),但在这个文件中可能并没有直接的server
或location
块配置,因为实际处理PHP请求的配置可能被包含在其他文件中。
2. 查找实际处理PHP请求的配置
在Nginx的配置中,找到类似这样的include语句:
include /etc/nginx/http.d/*.conf;
include /config/nginx/site-confs/*.conf;
这些语句表示Nginx会包含其他目录下的配置文件。
3. 编辑PHP请求处理配置
在config/nginx/site-confs/
目录下找到处理PHP请求的default.conf
文件(文件名可能因环境而异),并添加fastcgi缓冲区相关配置:
location ~ ^(.+\.php)(.*)$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
# 添加 fastcgi 缓冲区相关配置
fastcgi_buffer_size 32k;
fastcgi_buffers 16 16k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 64k;
}
4. 重启Nginx容器
修改配置后,需要重启Nginx容器以使配置生效。
docker restart nginx_container_name
或者如果是直接在物理机或虚拟机上运行的Nginx,则使用:
sudo systemctl restart nginx
总结
在解决Nginx的502 Bad Gateway错误时,需要关注Nginx与后端服务器(如PHP-FPM)之间的通信设置。对于通过fastcgi_pass处理的PHP请求,应该调整与fastcgi相关的缓冲区配置,而不是proxy_buffer_size等用于HTTP代理的配置。此外,Nginx的配置通常通过include语句分布在多个文件中,需要仔细查找和编辑正确的配置文件。
标签:管理器,nginx,配置,用户,Nginx,xx,报错,PHP,fastcgi From: https://www.cnblogs.com/midnightcookie/p/18369877