在多个 Apache 虚拟主机上提供一个 Django 应用程序

Serve one Django app on several Apache Virtualhosts

我们有一个由 Apache (mod-wsgi) 提供的 Django 应用程序,配置如下:

<VirtualHost vhost:80>
  # ...
  WSGIScriptAlias / /path/to/wsgi.py
</VirtualHost>

我们希望将单个应用程序提供给 2 个虚拟主机:vhost:80vhost:443 ... 客户端迁移所需的时间,最后只将其保留在 https 虚拟主机上。 是否可以将指令 WSGIScriptAlias / /path/to/wsgi.py 复制到第二个虚拟主机 (vhost:443) 中,或者我们是否会遇到问题 运行 两次相同的应用程序和相同的数据库?

首先,您要确保您使用的是 mod_wsgi 的守护程序模式,而不是嵌入式模式。无论哪种方式,如果正在使用多进程配置,您将已经有多个应用程序实例访问同一个数据库。这通常不是问题。为 SSL 添加虚拟主机时,问题是进程数加倍。这就是守护进程模式的用武之地。典型的配置是:

<VirtualHost *:80>
  ServerName sitename.example.com

  # Define a daemon process group.

  WSGIDaemonProcess sitename

  # Specify WSGI application and delegate to daemon process group.
  # As delegating here, don't need WSGIProcessGroup/WSGIApplicationGroup.

  WSGIScriptAlias / /path/to/wsgi.py process-group=sitename application-group=%{GLOBAL}

  # ... access control directives

</VirtualHost>

<VirtualHost *:443>
  ServerName sitename.example.com

  # ... SSL options

  # Specify WSGI application and delegate to daemon process group.
  # As delegating here, don't need WSGIProcessGroup/WSGIApplicationGroup.
  #
  # Note that we did not define a daemon process group in this virtual
  # host. Instead we rely on fact that can reach across and use daemon
  # process group defined in virtual host for port 80. This is possible
  # as value of ServerName is the same.

  WSGIScriptAlias / /path/to/wsgi.py process-group=sitename application-group=%{GLOBAL}

  # ... access control directives

</VirtualHost>

如果需要调整容量和性能,请将 process=nnnthreads=nnn 选项添加到 WSGIDaemonProcess。还要确保修改您可能想要在守护进程组上设置的超时选项。