OpenStack单节点部署后Horizon仪表盘出现504网关超时求助
作为刚接触OpenStack的初学者,碰到Horizon仪表盘的504超时确实挺头疼的——别慌,咱们一步步从基础点入手排查,大概率能找到问题所在:
先确认Horizon服务本身是否正常运行
用系统服务管理工具检查状态:# Ubuntu/Debian系 systemctl status openstack-dashboard # CentOS/RHEL系 systemctl status openstack-dashboard如果服务显示
inactive,先启动它并设置开机自启:systemctl start openstack-dashboard systemctl enable openstack-dashboard检查Horizon与前端代理的端口监听情况
Horizon通常依赖Apache或Nginx作为前端代理对外提供服务,先看代理服务状态:# Ubuntu/Debian systemctl status apache2 # CentOS/RHEL systemctl status httpd再检查端口是否正常监听:
ss -tulpn | grep -E "dashboard|apache2|httpd"确保Horizon的内部端口(比如默认8000)和代理的对外端口(80/443)都处于监听状态。
查看关键日志定位错误细节
日志是排查问题的核心,重点看这几个位置:- Horizon应用日志:
tail -f /var/log/openstack-dashboard/openstack_dashboard.log - 前端代理错误日志:
tail -f /var/log/apache2/error.log(Ubuntu)或tail -f /var/log/httpd/error_log(CentOS)
留意日志里的超时提示,比如是否是Horizon连接Keystone时超时——毕竟Horizon完全依赖Keystone做身份验证,如果配置的Keystone地址有误,或者内部连通性出问题,就会触发超时。
- Horizon应用日志:
验证Horizon与Keystone的连通性
先在节点上测试Keystone接口的可达性:curl http://<你的Keystone地址>:5000/v3然后检查Horizon的配置文件(
/etc/openstack-dashboard/local_settings.py)里的KEYSTONE_URL是否和实际Keystone的监听地址一致——别犯把Keystone设为127.0.0.1,但Horizon配置里写了公网IP的低级错误哦。排查防火墙与SELinux限制
- 防火墙:确认80/443端口已对外开放,比如Ubuntu用
ufw allow 80/tcp && ufw allow 443/tcp,CentOS用firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --add-port=443/tcp --permanent && firewall-cmd --reload - SELinux(仅CentOS/RHEL系):临时关闭SELinux测试
setenforce 0,如果关闭后能正常访问,再配置SELinux规则放行,比如setsebool -P httpd_can_network_connect on
- 防火墙:确认80/443端口已对外开放,比如Ubuntu用
检查系统资源是否充足
单节点部署很容易碰到内存不足的问题,用top或htop查看CPU和内存使用率,如果内存占比接近100%,Horizon或代理服务可能被系统强制终止,这种情况下要么关闭无关服务,要么给节点增加内存。
如果做完这些还没解决,把日志里的关键错误信息贴出来,就能更精准地定位问题啦!
内容的提问来源于stack exchange,提问作者Kaushik Narayanan

