Windows Server环境下使用Nginx部署Flask应用的全过程

 更新时间:2025年04月24日 09:28:59   作者:老胖闲聊  
Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用或服务,Nginx是一款高性能的HTTP和反向代理服务器,用于部署静态文件服务、负载均衡以及作为HTTP缓存等,本文给大家介绍了Windows Server环境下使用Nginx部署Flask应用的全过程,需要的朋友可以参考下

1. 环境准备

  1. 操作系统: Windows Server 2016/2019/2022
  2. Python: 安装最新稳定版(如 Python 3.10+),确保勾选 Add Python to PATH
  3. Nginx for Windows: 从 官网 下载 Windows 版本(如 nginx/Windows-1.25.3)。
  4. 依赖工具: 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 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 服务。
  • 排查:
    1. 检查 Waitress 是否运行 (tasklist | findstr waitress)。
    2. 检查防火墙是否允许端口 5000。

7. 扩展知识

7.1 启用 HTTPS

  1. 使用 Let’s Encrypt 获取免费证书(需域名)。
  2. 修改 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. 注意事项

  1. 生产环境禁用调试模式: 确保 Flask 的 app.run(debug=False)
  2. 日志管理: 配置 Nginx 和 Flask 的日志路径,定期归档。
  3. 备份配置: 修改关键文件前备份(如 nginx.conf)。

通过以上步骤, Flask 应用将在 Windows Server 上以高可靠性的方式运行,并通过 Nginx 实现高效反向代理和静态资源加速。

以上就是Windows Server环境下使用Nginx部署Flask应用的全过程的详细内容,更多关于Nginx部署Flask应用的资料请关注脚本之家其它相关文章!

相关文章

  • Nginx配置proxy protocol代理获取真实ip的全过程

    Nginx配置proxy protocol代理获取真实ip的全过程

    在现代开发中有很多场景需要拿到用户的真实ip,比如安全策略,和地区热点信息推送等功能,但是现在代理很多,用户可能会通过代理访问服务,或者黑客攻击的时候也会使用很多肉机隐藏其真实ip,所以本文给大家介绍了Nginx配置proxy protocol代理获取真实ip的全过程
    2025-09-09
  • Nginx 平滑升级的实现(拒绝服务漏洞)

    Nginx 平滑升级的实现(拒绝服务漏洞)

    本文主要介绍了Nginx 平滑升级的实现(拒绝服务漏洞),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 详解Nginx 虚拟主机配置的三种方式(基于端口)

    详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式主要有基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置。本篇文章主要介绍了基于端口的实现,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 在Nginx服务器上安装SSL证书完成HTTPS请求的步骤详解(springboot项目)

    在Nginx服务器上安装SSL证书完成HTTPS请求的步骤详解(springboot项目)

    这篇文章主要介绍了在Nginx服务器上安装SSL证书完成HTTPS请求(springboot项目),首先需要下载证书到本地接着在Nginx独立服务器上安装证书,本文给大家介绍的非常详细,需要的朋友参考下吧
    2022-04-04
  • nginx流量拷贝的实现示例

    nginx流量拷贝的实现示例

    Nginx的ngx_http_mirror_module模块提供流量复制功能,可将生产环境流量实时复制到测试环境,用于功能验证、性能测试和问题排查,下面就来详细的介绍一下nginx流量拷贝的使用,感兴趣的可以了解一下
    2026-01-01
  • nginx配置指令之server_name的具体使用

    nginx配置指令之server_name的具体使用

    本文主要介绍了nginx配置指令之server_name的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • nginx lua防火墙防SQL注入配置

    nginx lua防火墙防SQL注入配置

    本文详细介绍了基于Nginx和Lua的防火墙配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • Nginx反向代理配置的全过程记录

    Nginx反向代理配置的全过程记录

    这篇文章主要给大家介绍了关于Nginx反向代理配置的相关资料,nginx作为web服务器一个重要的功能就是反向代理,当然你也可以使用nginx配置正向代理,需要的朋友可以参考下
    2021-06-06
  • Nginx配置支持IPV6地址的方法示例

    Nginx配置支持IPV6地址的方法示例

    本文主要介绍了如何搭建并测试Nginx以支持IPV6地址的过程,包括下载安装包、编译安装、配置和启动Nginx等步骤,同时,文章还解决了在测试IPV6地址时遇到的两个问题:curl解析错误和阿里云、腾讯云IPV6地址配置问题
    2024-11-11
  • nginx 负载均衡配置及如何解决重复登录问题

    nginx 负载均衡配置及如何解决重复登录问题

    文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx 负载均衡配置及如何解决重复登录问题感兴趣的朋友一起看看吧
    2025-07-07

最新评论