uvicorn 在生产环境的角色

作用:uvicorn 是 应用服务器(ASGI server)

用途:直接运行你的 FastAPI 应用,处理 HTTP 请求、WebSocket、API 调用。

特点:高性能、异步、支持并发,但 不处理静态文件、反向代理、HTTPS/TLS、负载均衡。

也就是说,uvicorn 可以直接服务客户端,但不是完整的 Web 服务器解决方案。

Apache / Nginx 在生产环境的角色

作用:反向代理服务器、静态文件服务器、负载均衡器

用途:

  • 处理 HTTPS/TLS(SSL 证书)
  • 处理静态资源(图片、JS、CSS)
  • 负载均衡多个 uvicorn 进程
  • 限制请求速率、处理压缩、缓存

uvicorn 和 gunicorn、nginx 的区别

工具 位置 作用
uvicorn 应用服务器 直接运行 FastAPI
gunicorn 进程管理器 可配合 uvicorn 托管多个进程
nginx 反向代理 / 静态文件服务器 负责分发请求、负载均衡

实际环境:Apache + uvicorn

Apache + uvicorn 配合使用时,Apache 做反向代理和 HTTPS,uvicorn 专注运行 FastAPI 应用,生产环境常用这种组合。

工作原理:

客户端 → Apache (80/443) → uvicorn (127.0.0.1:8000) → FastAPI 应用

  • Apache:监听 80/443,处理 HTTPS、静态文件、防火墙、访问控制等
  • uvicorn:运行 FastAPI 应用,处理业务逻辑、API、WebSocket
  • mod_proxy:Apache 模块,用于转发请求到 uvicorn

Apache 必须启用模块:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel # 如果使用 WebSocket
sudo a2enmod headers
sudo a2enmod rewrite
sudo systemctl restart apache2

Apache 配置示例(反向代理):

<VirtualHost *:80>
ServerName yourdomain.com

# HTTP 转发到 uvicorn
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/

# 如果有 WebSocket
ProxyPass /ws/ ws://127.0.0.1:8000/ws/
ProxyPassReverse /ws/ ws://127.0.0.1:8000/ws/
</VirtualHost>

FastAPI + uvicorn 启动示例:

uvicorn app.main:app –host 127.0.0.1 –port 8000

说明:

  • 127.0.0.1:8000 → 只允许本机访问,由 Apache 转发外部请求
  • 外部用户访问 http://yourdomain.com,Apache 会把请求转给 uvicorn

启用 HTTPS(可选):

推荐在 Apache 层做 HTTPS,uvicorn 只处理 HTTP。

<VirtualHost *:443>
ServerName yourdomain.com

SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8000/
ProxyPassReverse / http://127.0.0.1:8000/
</VirtualHost>

作者 admin

百度广告效果展示