FastAPI配合Nginx部署后HTTPS模式无法加载静态文件问题求助
FastAPI HTTPS模式下静态资源无法加载修复方案
核心问题根因
- Nginx 443端口配置缺失裸域名匹配,访问不带www的HTTPS站点时无法正确命中静态资源规则
- 代理请求头拼写错误,FastAPI无法识别前端HTTPS协议,
url_for生成的静态资源链接仍为HTTP开头,被浏览器的混合内容安全策略拦截 - 静态路径alias配置缺少结尾斜杠,路径拼接异常
- supervisor配置存在拼写错误,可能导致应用运行异常
分步修复操作
1. 修正Nginx配置
打开/etc/nginx/sites-enabled/<my_url>.nginx文件做如下修改:
443端口server块补全域名
将443块的server_name修改为和80端口一致:
server { listen 443 ssl; server_name www.<my_url>.com <my_url>.com; # 补全裸域名 # 其余ssl配置保持不变
修正代理请求头
把HTTP和HTTPS块中@yourapplication段的请求头修正为标准格式:
location @yourapplication { gzip on; gzip_buffers 8 256k; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 修正拼写错误,去掉多余的l }
修正静态资源路径配置
把HTTP和HTTPS块中的/static location块修改为带结尾斜杠的格式:
location /static/ { gzip on; gzip_buffers 8 256k; alias /home/<user_name>/application/static/; # 末尾加斜杠 expires 365d; }
修改完成后验证Nginx配置是否合法:
sudo nginx -t
验证通过后重载配置:
sudo systemctl reload nginx
2. 修正FastAPI配置
修改main.py中的FastAPI初始化代码,开启代理头信任:
api = fastapi.FastAPI( trusted_hosts=["127.0.0.1", "<my_url>.com", "www.<my_url>.com"] )
3. 修正supervisor配置
打开supervisor服务脚本,删除拼写错误的环境变量行:
[program:api] directory=/home/<user_name>/application command=gunicorn -b 127.0.0.1:8000 -w 4 -k uvicorn.workers.UvicornWorker main:api autostart=true autorestart=true stopasgroup=true killasgroup=true stderr_logfile=/var/log/app/app.err.log stdout_logfile=/var/log/app/app.out.log
修改完成后重启应用服务:
sudo supervisorctl reload sudo supervisorctl restart api
4. 验证静态资源权限
确保Nginx运行用户有静态目录的读取权限:
sudo chown -R <user_name>:www-data /home/<user_name>/application/static sudo chmod -R 755 /home/<user_name>/application/static
测试方法
使用浏览器隐身模式访问HTTPS站点,打开开发者工具的「网络」标签,确认静态资源请求为HTTPS协议、返回状态码为200即可。如果仍有问题,可查看Nginx错误日志定位具体原因:
tail -f /var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者Brad Allen
相关产品推荐
相关产品推荐

