无法访问以Windows服务运行的FastAPI应用(基于pywin32创建)
解决FastAPI作为Windows服务启动后无法访问的问题
1. 修改FastAPI监听地址
默认FastAPI仅绑定本地回环地址127.0.0.1,服务运行在系统账户下可能存在访问限制。将监听地址改为0.0.0.0,让应用监听所有网卡:
# main.py中的启动代码 if __name__ == "__main__": import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=False)
注意:服务模式下禁用reload=True,避免引发服务异常。
2. 修正服务工作目录
Windows服务默认工作目录并非你的项目目录,可能导致应用加载失败。在win_service.py的服务启动方法中添加目录切换代码:
# win_service.py的SvcDoRun方法开头添加 import os os.chdir("你的项目绝对路径,例如C:\\fastapi_project")
3. 更换服务运行账户
默认Local System账户可能存在网络权限限制,将服务运行账户改为当前管理员账户:
- 打开「服务」面板,找到你的FastAPI服务
- 右键→属性→登录选项卡
- 选择「此账户」,输入管理员用户名和密码,点击确定
- 重启服务后尝试访问
4. 排查端口与防火墙
- 管理员CMD执行
netstat -ano | findstr :8000,确认8000端口是否被服务进程占用 - 检查Windows防火墙,添加入站规则允许TCP 8000端口的访问
5. 添加日志定位问题
在win_service.py和main.py中添加日志,排查启动异常:
# win_service.py中添加日志配置 import logging logging.basicConfig(filename="C:\\logs\\fastapi_service.log", level=logging.INFO, format="%(asctime)s - %(message)s") logging.info("服务启动中") # main.py中添加日志 import logging logging.basicConfig(filename="C:\\logs\\fastapi_app.log", level=logging.INFO) app = FastAPI() @app.get("/") async def root(): logging.info("收到请求") return {"message": "Hello World"}
查看日志文件,确认服务是否正常启动、有无报错信息。
内容的提问来源于stack exchange,提问作者Jaydeep
相关产品推荐
相关产品推荐

