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