博客
关于我
python uWSGI 官方文档的僵硬翻译
阅读量:528 次
发布时间:2019-03-08

本文共 3085 字,大约阅读时间需要 10 分钟。

什么是 uWSGI?

uWSGI 是一个开源的高性能 WSGI 通信协议服务器,支持多种应用程序框架的部署,比如 Django、Flask 和 Web2Py 等。它通过 uwsgi 协议与网络服务器如 Nginx 或 Apache 通信,同时也直接支持 HTTP 和 HTTPS 协议。作为一个高性能的服务器,uWSGI 广泛地应用于开发和部署现代 web 应用程序。

uWSGI 配置

uWSGI 的配置文件可以通过多种方式指定,包括 .ini、.xml、.yaml 和 .json 格式的文件。配置命令直接对应配置文件中的条目,让用户可以灵活选择适合自己的部署方式。以下是通过命令行和配置文件的对应关系:

  • 命令行:uwsgi --http-socket :9090 --psgi myapp.pl
  • 配置文件:
    [uwsgi]
    http-socket = :9090
    psgi = myapp.pl

uWSGI 提供多种方式来加载配置文件和设置参数:

  • 通过文件描述符:
    uwsgi --yaml fd://0
  • 通过HTTP URL:
    uwsgi --ini http://uwsgi.it/configs/myapp.ini
  • 通过执行命令:
    uwsgi --json 'exec://nc 192.168.11.2:33000'

其他配置选项可以根据你的需求添加,关键是保持配置文件清晰和简洁。

启动一个 HTTP 服务器

为了使用 uWSGI 作为 HTTP 服务器,可以通过以下命令启动:

uwsgi --http :9090 --wsgi-file foobar.py

Here, foobar.py 是一个包含 WSGI 应用程序的 Python 文件。默认情况下,uWSGI 会以单进程和单线程的模式运行。你可以通过 --processes--threads 参数增加进程和线程的数量,适用于高并发场景。

并发和监控

在生产环境中,高并发和稳定性至关重要。uWSGI 提供了多进程和多线程的支持,并通过 --stats 参数输出实时监控数据。例如,以下命令会启动 4 个进程和 2 个线程,并启用监控:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

如果需要更深入的监控,可以使用 uwsgitop 工具来实时查看资源使用情况。

uWSGI 作为 Web 服务器

虽然 uWSGI 本身可以直接作为 Web 服务器,但在实际场景中,通常会将其与 Nginx 或 Apache 结合使用。这样可以利用 Nginx 的负载均衡和反向代理功能,将请求转发给 uWSGI。以下是 Nginx 配置示例:

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031;
}

然后,启动 uWSGI 服务器:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Django 部署

在 Django 项目中使用 uWSGI,需要将应用程序绑定到特定的端口并配置项目根目录。以下是通过配置文件和命令行的部署示例:

配置文件 yourfile.ini:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

启动命令行:

uwsgi yourfile.ini

如果你的 Django 版本较低,可能需要额外的选项:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --pythonpath .. --env DJANGO_SETTINGS_MODULE=myproject.settings --module "django.core.handlers.wsgi:WSGIHandler()" --processes 4 --threads 2 --stats 127.0.0.1:9191

Flask 部署

Flask 的部署相对简单,以下是通过配置文件和命令行的示例:

配置文件 yourfile.ini:

[uwsgi]
socket = 127.0.0.1:5000
chdir = /home/flaskproject
wsgi-file = manage.py
callable = app
processes = 4
threads = 2
stats = 127.0.0.1:9191

启动命令行:

uwsgi yourfile.ini

支持了详细的配置选项,可以根据项目需求灵活设置。

Web2Py 部署

在 Web2Py 中,uWSGI 服务器同样需要配置好地址、证书和项目根目录。以下是通过配置文件的示例:

配置文件 yourfile.ini:

[uwsgi]
http = :9090
chdir = path_to_web2py
module = wsgihandler
master = true
processes = 8

绑定 HTTPS 证书:

[uwsgi]
https = :9090,foobar.crt,foobar.key
chdir = path_to_web2py
module = wsgihandler
master = true
processes = 8

生成 SSL 证书(需安装密码管理工具如 Ansible 或 LibreNLS ):

# 生成 certificate 和 private key
openssl genrsa -out foobar.key 2048
openssl req -new -key foobar.key -out foobar.csr
openssl x509 -req -days 365 -in foobar.csr -signkey foobar.key -out foobar.crt
#тов.load centrifuge imagecopy证书到配置文件

启动命令:

uwsgi yourfile.ini

注意事项

  • 线程支持:默认情况下,uWSGI 不启用 Python GIL。如果需要线程支持,可以通过 --enable-threads 选项启用。

  • 安全性:避免在根用户权限运行 uWSGI。通过设置 uidgid 限制启动权限,并删除非必要的权限。

  • 高并发:为了防止请求卡死,使用 harakiri 计时器监控长时间未响应的进程。默认设置可以根据实际需求调整。

  • 虚拟环境:在使用虚拟环境时,可以通过 --virtualenv 选项指定路径。

  • 可靠性:uWSGI 提供多种保护机制,链重载等,确保服务在部分进程故障时不中断。

通过合理配置和监控,uWSGI 能够在高并发场景中提供稳定可靠的服务。如果你需要更详细的信息,可以参考相关文档或社区资源。

转载地址:http://hpsiz.baihongyu.com/

你可能感兴趣的文章
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>