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

本文共 3053 字,大约阅读时间需要 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 = :9090psgi = 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:3031chdir = /home/foobar/myprojectwsgi-file = myproject/wsgi.pyprocesses = 4threads = 2stats = 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:5000chdir = /home/flaskprojectwsgi-file = manage.pycallable = appprocesses = 4threads = 2stats = 127.0.0.1:9191

启动命令行:

uwsgi yourfile.ini

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

Web2Py 部署

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

配置文件 yourfile.ini:

[uwsgi]http = :9090chdir = path_to_web2pymodule = wsgihandlermaster = trueprocesses = 8

绑定 HTTPS 证书:

[uwsgi]https = :9090,foobar.crt,foobar.keychdir = path_to_web2pymodule = wsgihandlermaster = trueprocesses = 8

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

# 生成 certificate 和 private keyopenssl genrsa -out foobar.key 2048openssl req -new -key foobar.key -out foobar.csropenssl 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/

你可能感兴趣的文章
mysql数据被误删的恢复方案
查看>>
MySQL数据读写分离(MaxScale)上干货!!!
查看>>
mysql整库导入、导出
查看>>
mysql文本函数和数字函数
查看>>
Mysql新建用户和数据库并授权
查看>>
mysql日志
查看>>
mysql日志 事务问题_mysql因为事务日志问题无法启动
查看>>
mysql日志文件
查看>>
mysql日志管理学习笔记
查看>>
mysql日志问题定位实用命令
查看>>
MySQL日期时间函数大全
查看>>
mysql时间相减的问题
查看>>
mysql时间表示和计算
查看>>
MySQL是如何做容器测试的?
查看>>
mysql更改数据库表utf-8_修改mysql数据库为 utf-8
查看>>
mysql更改表引擎INNODB为MyISAM的方法总结
查看>>
mysql更新一个表里的字段等于另一个表某字段的值
查看>>
Mysql更新时间列只改日期为指定日期不更改时间
查看>>
MySQL更新锁(for update)摘要
查看>>
mysql更新频率_MySQL优化之如何了解SQL的执行频率
查看>>