如何设置具有多个虚拟主机的 python Web 服务器?

发布于 2024-07-13 16:12:50 字数 75 浏览 5 评论 0原文

我被告知 wsgi 是可行的方法,而不是 mod_python。 但更具体地说,您将如何设置多网站服务器环境? 网络服务器的选择等?

I've been told wsgi is the way to go and not mod_python. But more specifically, how would you set up your multi website server environment? Choice of web server, etc?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁月染过的梦 2024-07-20 16:12:50

Apache+mod_wsgi 是常见的选择。

这是一个简单的虚拟主机示例,设置为将对 /wsgi/something 的任何请求映射到应用程序(然后可以查看 PATH_INFO 来选择操作,或者无论您如何进行调度)。 根 URL“/”也被路由到 WSGI 应用程序。

LoadModule wsgi_module /usr/local/lib/mod_wsgi.so
...

<VirtualHost *:80>
    ServerName                  www.example.com
    DocumentRoot                /www/example/htdocs
    WSGIScriptAliasMatch ^/$    /www/example/application.py
    WSGIScriptAlias      /wsgi  /www/example/application.py
</VirtualHost>

如果您愿意,可以使用 WSGIProcessGroup 指令来分隔不同虚拟主机的处理程序。 如果您需要虚拟主机的脚本在不同用户下运行,则需要使用 WSGIDaemonProcess 而不是嵌入式 Python 解释器。

application.py 在运行时会将 WSGI 保留在全局“application”变量中可调用。 您还可以添加一个 run-as-main 页脚以与老式 CGI 兼容:

#!/usr/bin/env python
from mymodule import MyApplication

application= MyApplication()

if __name__=='main':
    import wsgiref.handlers
    wsgiref.handlers.CGIHandler().run(application)

Apache+mod_wsgi is a common choice.

Here's a simple example vhost, setup up to map any requests for /wsgi/something to the application (which can then look at PATH_INFO to choose an action, or however you are doing your dispatching). The root URL '/' is also routed to the WSGI application.

LoadModule wsgi_module /usr/local/lib/mod_wsgi.so
...

<VirtualHost *:80>
    ServerName                  www.example.com
    DocumentRoot                /www/example/htdocs
    WSGIScriptAliasMatch ^/$    /www/example/application.py
    WSGIScriptAlias      /wsgi  /www/example/application.py
</VirtualHost>

You can use the WSGIProcessGroup directive to separate handlers for different vhosts if you like. If you need vhosts' scripts to be run under different users you'll need to use WSGIDaemonProcess instead of the embedded Python interpreter.

application.py would, when run, leave your WSGI callable in the global ‘application’ variable. You can also add a run-as-main footer for compatibility with old-school CGI:

#!/usr/bin/env python
from mymodule import MyApplication

application= MyApplication()

if __name__=='main':
    import wsgiref.handlers
    wsgiref.handlers.CGIHandler().run(application)
顾忌 2024-07-20 16:12:50

我推荐使用 Nginx 作为 Web 服务器。 设置快速且简单。

您可能希望每个虚拟主机有一个 UNIX 用户 - 因此每个主目录都拥有自己的应用程序、Python 环境和服务器配置。 这允许您安全地重新启动特定应用程序,只需杀死您的虚拟主机拥有的工作进程即可。

只是一个提示,希望有帮助。

I'd recommend Nginx for the web server. Fast and easy to set up.

You'd probably want to have one unix user per vhost - so every home directory holds its own application, python environment and server configuration. This allows you to restart a particular app safely, simply by killing worker processes that your vhost owns.

Just a tip, hope it helps.

痴梦一场 2024-07-20 16:12:50

您可以使用 Apache 和 mod_wsgi。 这样,您仍然可以使用 Apache 对虚拟主机的内置支持。

You could use Apache and mod_wsgi. That way, you can still use Apache's built-in support for vhosts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文