1. 环境准备
- 操作系统: windows server 2016/2019/2022
- python: 安装最新稳定版(如 python 3.10+),确保勾选
add python to path
。 - nginx for windows: 从 官网 下载 windows 版本(如 nginx/windows-1.25.3)。
- 依赖工具: git(可选,用于代码拉取)、文本编辑器(如 vs code)。
2. 创建 flask 应用
2.1 项目结构
c:\flask-app\ ├── app.py # flask 主程序 ├── requirements.txt ├── static\ # 静态文件 └── venv\ # python 虚拟环境
2.2 示例 app.py
from flask import flask app = flask(__name__) @app.route('/') def home(): return "hello, world! flask on windows server with nginx!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
2.3 安装依赖
# 创建虚拟环境 python -m venv venv venv\scripts\activate # 安装 flask 和 waitress(生产级 wsgi 服务器) pip install flask waitress
3. 使用 waitress 启动 flask
3.1 启动命令
waitress-serve --port=5000 --threads=4 app:app
- 参数说明:
--port
: 监听端口--threads
: 线程数(根据 cpu 核心调整)
3.2 创建启动脚本 start_server.bat
@echo off call venv\scripts\activate waitress-serve --port=5000 --threads=4 app:app
4. 配置 nginx 反向代理
4.1 修改 nginx 配置文件 nginx.conf
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; # 反向代理配置 upstream flask_app { server 127.0.0.1:5000; # waitress 监听地址 } server { listen 80; server_name your_domain.com; # 替换为域名或服务器 ip # 静态文件处理(由 nginx 直接代理) location /static { alias c:/flask-app/static; # 替换为实际路径 expires 30d; } # 动态请求代理到 flask location / { proxy_pass http://flask_app; 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; } } }
4.2 启动 nginx
# 检查配置语法 nginx -t # 启动 nginx start nginx # 重启(修改配置后) nginx -s reload
5. 配置 windows 服务(开机自启)
5.1 使用 nssm 工具(推荐)
- 下载 nssm.exe
- 注册 nginx 服务:
nssm install nginx "c:\nginx\nginx.exe" # 替换为 nginx 实际路径 nssm start nginx
- 注册 waitress 服务:
nssm install flaskapp "c:\flask-app\venv\scripts\python.exe" "c:\flask-app\venv\scripts\waitress-serve.exe" --port=5000 app:app nssm start flaskapp
6. 常见问题与解决方案
6.1 端口冲突
- 错误:
bind() to 0.0.0.0:5000 failed: 仅允许使用一个套接字地址
- 解决: 检查是否有其他程序占用端口,使用
netstat -ano | findstr :5000
并终止进程。
6.2 静态文件 404
- 错误: 浏览器无法加载
/static/style.css
- 解决: 确保 nginx 配置中的
alias
路径使用正斜杠(c:/flask-app/static
),且目录存在。
6.3 nginx 502 bad gateway
- 原因: nginx 无法连接后端 flask 服务。
- 排查:
- 检查 waitress 是否运行 (
tasklist | findstr waitress
)。 - 检查防火墙是否允许端口 5000。
- 检查 waitress 是否运行 (
7. 扩展知识
7.1 启用 https
- 使用 let’s encrypt 获取免费证书(需域名)。
- 修改 nginx 配置:
server { listen 443 ssl; ssl_certificate c:/ssl/your_domain.crt; ssl_certificate_key c:/ssl/your_domain.key; # ... 其他配置 }
7.2 负载均衡
upstream flask_app { server 127.0.0.1:5000; server 127.0.0.1:5001; # 启动第二个实例 least_conn; # 使用最少连接算法 }
8. 注意事项
- 生产环境禁用调试模式: 确保 flask 的
app.run(debug=false)
。 - 日志管理: 配置 nginx 和 flask 的日志路径,定期归档。
- 备份配置: 修改关键文件前备份(如
nginx.conf
)。
通过以上步骤, flask 应用将在 windows server 上以高可靠性的方式运行,并通过 nginx 实现高效反向代理和静态资源加速。
以上就是windows server环境下使用nginx部署flask应用的全过程的详细内容,更多关于nginx部署flask应用的资料请关注代码网其它相关文章!
发表评论