在Nginx服务器用Waitress部署Dash应用遇404错误求助
排查Dash + Waitress + Nginx部署静态资源404/加载失败问题
检查Dash静态资源路径配置
Dash默认依赖assets目录存放静态资源,部署时要确保Waitress能正确访问该目录:- 启动Waitress时,要么确保工作目录是Dash应用的根目录,要么通过
--static-url参数显式绑定静态资源路径:waitress-serve --listen=127.0.0.1:8080 --static-url='/assets'='./assets' app:server - 初始化Dash应用时,显式指定
assets_folder参数,避免路径识别错误:app = dash.Dash(__name__, assets_folder='./assets')
- 启动Waitress时,要么确保工作目录是Dash应用的根目录,要么通过
核对Nginx反向代理规则
Nginx的配置错误是这类问题的高发原因,重点检查以下几点:- 添加静态资源专属的转发规则,防止Nginx拦截Dash的静态资源请求:
location /assets/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } - 主代理块必须包含WebSocket支持(Dash依赖WebSocket实现实时更新,缺失会导致一直显示Loading):
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # WebSocket 支持配置 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } - 检查SSL配置下的
rewrite或redirect规则,确认没有意外修改/assets路径的请求。
- 添加静态资源专属的转发规则,防止Nginx拦截Dash的静态资源请求:
验证静态资源的可访问性
通过命令行直接验证请求链路:- 先在服务器本地请求Waitress端口的静态资源,确认Waitress能正确返回:
如果返回404,说明Waitress未找到资源,回到第一步确认路径配置。curl http://127.0.0.1:8080/assets/favicon.ico - 再通过域名请求静态资源,确认Nginx转发正常:
如果返回404,说明Nginx规则未正确转发,检查location配置。curl https://your-domain.com/assets/favicon.ico
- 先在服务器本地请求Waitress端口的静态资源,确认Waitress能正确返回:
检查子路径部署的适配配置
如果Dash应用部署在域名的子路径下(比如https://your-domain.com/dash-app/):- 初始化Dash时必须设置
requests_pathname_prefix参数:app = dash.Dash(__name__, requests_pathname_prefix='/dash-app/') - 同步调整Nginx的location块为对应子路径,确保请求正确转发。
- 打开浏览器控制台的网络面板,查看静态资源的请求URL是否符合预期,避免出现路径前缀缺失或冗余的情况。
- 初始化Dash时必须设置
确认文件权限
确保服务器上assets目录及内部文件的权限允许Waitress进程读取:chmod -R 755 ./assets同时检查文件的所属用户/组是否与Waitress运行的用户一致,避免权限拒绝导致的404。
内容的提问来源于stack exchange,提问作者gothicVI
相关产品推荐
相关产品推荐

