主页

索引

模块索引

搜索页面

interpreter-解释器

  • 如果你在 uWSGI 中运行多个应用或者需要高隔离性,那么启用多解释器模式(默认模式,即 single-interpreter = false)更合适。每个应用或租户将有自己的解释器实例,减少了不同应用之间的干扰和潜在的安全问题。

  • 在 uWSGI 配置中提到的“单个应用程序”是指运行在 uWSGI 实例中的一个具体的 Python WSGI 应用。当你只运行一个应用时,可以禁用多解释器模式以优化资源使用和性能。

多个应用程序的示例

  • 在这个示例中,uWSGI 被配置为支持多个解释器实例(single-interpreter = false),这样可以保证每个应用程序都有自己的解释器实例,从而避免全局状态的共享和冲突。

  • 每个应用程序都通过一个独立的 uWSGI 配置文件(app1.ini 和 app2.ini)来定义,并且每个应用程序都运行在不同的 socket 上。Nginx 负责反向代理,将不同的 URL 路径映射到对应的应用程序上。

  • 通过这种配置,你可以在同一个 uWSGI 实例中运行多个应用程序,同时保持它们之间的隔离和独立性。

应用程序 1 (app1.py):

# app1.py
from flask import Flask

app1 = Flask(__name__)

@app1.route('/')
def hello_app1():
    return 'Hello from App 1!'

if __name__ == '__main__':
    app1.run()

应用程序 2 (app2.py):

# app2.py
from flask import Flask

app2 = Flask(__name__)

@app2.route('/')
def hello_app2():
    return 'Hello from App 2!'

if __name__ == '__main__':
    app2.run()

uWSGI 配置文件(uwsgi.ini):

[uwsgi]
http = :9001
master = true
processes = 2
threads = 2

# 启用多个解释器实例
single-interpreter = false

# 加载应用1和应用2
vassals = /etc/uwsgi/vassals/

应用程序 1 的 uWSGI 配置 (app1.ini):

[uwsgi]
module = app1:app1
callable = app1
virtualenv = /path/to/virtualenv/app1
processes = 1
socket = 127.0.0.1:9002
chdir = /path/to/app1

应用程序 2 的 uWSGI 配置 (app2.ini):

[uwsgi]
module = app2:app2
callable = app2
virtualenv = /path/to/virtualenv/app2
processes = 1
socket = 127.0.0.1:9003
chdir = /path/to/app2

Nginx 配置(nginx.conf):

server {
    listen 80;

    location /app1 {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9002;
        uwsgi_modifier1 30;
    }

    location /app2 {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9003;
        uwsgi_modifier1 30;
    }
}

目录结构:

/path/to/
|-- app1/
|   |-- app1.py
|   |-- venv/  # virtualenv for app1
|
|-- app2/
|   |-- app2.py
|   |-- venv/  # virtualenv for app2
|
|-- /etc/uwsgi/vassals/
|   |-- app1.ini
|   |-- app2.ini
|
|-- uwsgi.ini
|-- nginx.conf

主页

索引

模块索引

搜索页面