Windows Server環(huán)境下使用Nginx部署Flask應(yīng)用的全過(guò)程
1. 環(huán)境準(zhǔn)備
- 操作系統(tǒng): Windows Server 2016/2019/2022
- Python: 安裝最新穩(wěn)定版(如 Python 3.10+),確保勾選
Add Python to PATH
。 - Nginx for Windows: 從 官網(wǎng) 下載 Windows 版本(如 nginx/Windows-1.25.3)。
- 依賴(lài)工具: Git(可選,用于代碼拉取)、文本編輯器(如 VS Code)。
2. 創(chuàng)建 Flask 應(yīng)用
2.1 項(xiàng)目結(jié)構(gòu)
C:\flask-app\ ├── app.py # Flask 主程序 ├── requirements.txt ├── static\ # 靜態(tài)文件 └── venv\ # Python 虛擬環(huán)境
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 安裝依賴(lài)
# 創(chuàng)建虛擬環(huán)境 python -m venv venv venv\Scripts\activate # 安裝 Flask 和 Waitress(生產(chǎn)級(jí) WSGI 服務(wù)器) pip install flask waitress
3. 使用 Waitress 啟動(dòng) Flask
3.1 啟動(dòng)命令
waitress-serve --port=5000 --threads=4 app:app
- 參數(shù)說(shuō)明:
--port
: 監(jiān)聽(tīng)端口--threads
: 線(xiàn)程數(shù)(根據(jù) CPU 核心調(diào)整)
3.2 創(chuàng)建啟動(dòng)腳本 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 監(jiān)聽(tīng)地址 } server { listen 80; server_name your_domain.com; # 替換為域名或服務(wù)器 IP # 靜態(tài)文件處理(由 Nginx 直接代理) location /static { alias C:/flask-app/static; # 替換為實(shí)際路徑 expires 30d; } # 動(dòng)態(tài)請(qǐng)求代理到 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 啟動(dòng) Nginx
# 檢查配置語(yǔ)法 nginx -t # 啟動(dòng) Nginx start nginx # 重啟(修改配置后) nginx -s reload
5. 配置 Windows 服務(wù)(開(kāi)機(jī)自啟)
5.1 使用 NSSM 工具(推薦)
- 下載 nssm.exe
- 注冊(cè) Nginx 服務(wù):
nssm install Nginx "C:\nginx\nginx.exe" # 替換為 Nginx 實(shí)際路徑 nssm start Nginx
- 注冊(cè) Waitress 服務(wù):
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. 常見(jiàn)問(wèn)題與解決方案
6.1 端口沖突
- 錯(cuò)誤:
bind() to 0.0.0.0:5000 failed: 僅允許使用一個(gè)套接字地址
- 解決: 檢查是否有其他程序占用端口,使用
netstat -ano | findstr :5000
并終止進(jìn)程。
6.2 靜態(tài)文件 404
- 錯(cuò)誤: 瀏覽器無(wú)法加載
/static/style.css
- 解決: 確保 Nginx 配置中的
alias
路徑使用正斜杠(C:/flask-app/static
),且目錄存在。
6.3 Nginx 502 Bad Gateway
- 原因: Nginx 無(wú)法連接后端 Flask 服務(wù)。
- 排查:
- 檢查 Waitress 是否運(yùn)行 (
tasklist | findstr waitress
)。 - 檢查防火墻是否允許端口 5000。
- 檢查 Waitress 是否運(yùn)行 (
7. 擴(kuò)展知識(shí)
7.1 啟用 HTTPS
- 使用 Let’s Encrypt 獲取免費(fèi)證書(shū)(需域名)。
- 修改 Nginx 配置:
server { listen 443 ssl; ssl_certificate C:/ssl/your_domain.crt; ssl_certificate_key C:/ssl/your_domain.key; # ... 其他配置 }
7.2 負(fù)載均衡
upstream flask_app { server 127.0.0.1:5000; server 127.0.0.1:5001; # 啟動(dòng)第二個(gè)實(shí)例 least_conn; # 使用最少連接算法 }
8. 注意事項(xiàng)
- 生產(chǎn)環(huán)境禁用調(diào)試模式: 確保 Flask 的
app.run(debug=False)
。 - 日志管理: 配置 Nginx 和 Flask 的日志路徑,定期歸檔。
- 備份配置: 修改關(guān)鍵文件前備份(如
nginx.conf
)。
通過(guò)以上步驟, Flask 應(yīng)用將在 Windows Server 上以高可靠性的方式運(yùn)行,并通過(guò) Nginx 實(shí)現(xiàn)高效反向代理和靜態(tài)資源加速。
以上就是Windows Server環(huán)境下使用Nginx部署Flask應(yīng)用的全過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Nginx部署Flask應(yīng)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx中配置用戶(hù)服務(wù)器訪(fǎng)問(wèn)認(rèn)證的方法示例
這篇文章主要介紹了Nginx中配置用戶(hù)服務(wù)器訪(fǎng)問(wèn)認(rèn)證的方法示例,包括一個(gè)用perl腳本來(lái)實(shí)現(xiàn)的方法,需要的朋友可以參考下2016-01-01nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法
這篇文章主要介紹了nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法,本文結(jié)論是空主機(jī)頭導(dǎo)致的大量400錯(cuò)誤日志,關(guān)閉默認(rèn)主機(jī)的日志記錄就可以解決問(wèn)題,需要的朋友可以參考下2015-01-01nginx?http?499錯(cuò)誤碼詳解以及解決辦法
HTTP狀態(tài)碼出現(xiàn)499錯(cuò)誤有多種情況,499錯(cuò)誤是什么?這篇文章主要給大家介紹了關(guān)于nginx?http?499錯(cuò)誤碼以及解決辦法的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01Nginx 只允許 www 域名訪(fǎng)問(wèn)并禁止裸域名訪(fǎng)問(wèn)的實(shí)現(xiàn)步驟
通過(guò)Nginx配置,可以設(shè)定僅允許www域名訪(fǎng)問(wèn),禁止或重定向裸域名,提升網(wǎng)站品牌統(tǒng)一性及用戶(hù)體驗(yàn),設(shè)置包括創(chuàng)建針對(duì)www的虛擬主機(jī),禁止裸域名訪(fǎng)問(wèn),并可選進(jìn)行裸域名到www的301重定向,完成后,重啟Nginx服務(wù)器使配置生效2024-10-10配置nginx 重定向到系統(tǒng)維護(hù)頁(yè)面
今天抽時(shí)間給大家普及nginx 重定向到系統(tǒng)維護(hù)頁(yè)面的配置內(nèi)容,nginx重定向問(wèn)題說(shuō)起來(lái)也很簡(jiǎn)單,因?yàn)橹囟ㄏ蚝笾苯犹D(zhuǎn)到靜態(tài)頁(yè)面,不需要后續(xù)操作和記錄,所以直接301永久重定向。今天簡(jiǎn)單給大家介紹配置方法,一起看看吧2021-06-06Nginx請(qǐng)求轉(zhuǎn)發(fā)配置指南
Nginx 是一款高性能的 HTTP 和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器,本文檔將介紹如何使用 Nginx 配置請(qǐng)求轉(zhuǎn)發(fā),并解釋一些常用的配置參數(shù),需要的朋友可以參考下2024-10-10詳解nginx配置location總結(jié)及rewrite規(guī)則寫(xiě)法
本篇文章主要介紹了詳解nginx配置location總結(jié)及rewrite規(guī)則寫(xiě)法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02nginx+lua單機(jī)上萬(wàn)并發(fā)的實(shí)現(xiàn)
nginx是我們最常用的服務(wù)器,常用于做內(nèi)容分發(fā)和反向代理,本文主要介紹了nginx+lua單機(jī)上萬(wàn)并發(fā)的實(shí)現(xiàn),有興趣的可以了解下2021-05-05