博客
关于我
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/

你可能感兴趣的文章
Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
查看>>
Objective-C实现1000 位斐波那契数算法(附完整源码)
查看>>
Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
查看>>
Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
查看>>
Objective-C实现2D变换算法(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现9x9乘法表算法(附完整源码)
查看>>
Objective-C实现9×9二维数组数独算法(附完整源码)
查看>>
Objective-C实现A*(A-Star)算法(附完整源码)
查看>>
Objective-C实现A-Star算法(附完整源码)
查看>>
Objective-C实现abbreviation缩写算法(附完整源码)
查看>>
Objective-C实现ABC人工蜂群算法(附完整源码)
查看>>
Objective-C实现activity selection活动选择问题算法(附完整源码)
查看>>
Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
查看>>
Objective-C实现adaboost算法(附完整源码)
查看>>
Objective-C实现Adler32算法(附完整源码)
查看>>
Objective-C实现AES算法(附完整源码)
查看>>
Objective-C实现AffineCipher仿射密码算法(附完整源码)
查看>>
Objective-C实现aliquot sum等分求和算法(附完整源码)
查看>>