使用Django'运行多个站点;通过Gunicorn/Nginx实现s站点框架

使用Django'运行多个站点;通过Gunicorn/Nginx实现s站点框架,django,apache,nginx,Django,Apache,Nginx,我有一个基于Django的CMS,它使用Django的站点框架和Nginx/Apache/mod_wsgi虚拟主机在不同的域上运行许多网站。我们正在评估Django堆栈的其他选项,并让CMS在一台新服务器上运行一个站点,Nginx代理Gunicorn(特别是Gunicorn_Django) 虽然这对单个站点非常有效,但我不确定如何为多个站点配置Gunicorn。问题是,使用Apache/mod_wsgi,我们可以将mod_wsgi的DJANGO_设置\u模块设置为相应站点的SETTINGS.py

我有一个基于Django的CMS,它使用Django的站点框架和Nginx/Apache/mod_wsgi虚拟主机在不同的域上运行许多网站。我们正在评估Django堆栈的其他选项,并让CMS在一台新服务器上运行一个站点,Nginx代理Gunicorn(特别是Gunicorn_Django)

虽然这对单个站点非常有效,但我不确定如何为多个站点配置Gunicorn。问题是,使用Apache/mod_wsgi,我们可以将mod_wsgi的
DJANGO_设置\u模块设置为相应站点的
SETTINGS.py

import os, sys

def inflight(filename):
    """
    Calculate absolute path to the folder containing "myfile.wsgi", then
    append to the PYTHONPATH.
    """
    ROOT = ('/').join(os.path.abspath(os.path.dirname(filename)).split('/')[0:-1])
    sys.path.append(ROOT)
    sys.path.append(os.path.join(ROOT, 'website'))

    sys.stdout = sys.stderr
    # Each website should have a settings file: /www/mysite.com/website/settings.py
    os.environ['DJANGO_SETTINGS_MODULE'] = 'website.settings'
    import django.core.handlers.wsgi
    return django.core.handlers.wsgi.WSGIHandler()
目前,我认为对于我们运行的每个虚拟主机站点,我必须有一个不同的Gunicorn实例,但对于我们访问大多数站点的流量来说,这似乎有些过头了


是否有人使用Django的sites framework运行Gunicorn,并能提示它是如何配置的?

我也遇到了同样的问题,在寻找相同的答案时偶然发现了这个问题

我知道这个问题由来已久,你现在可能已经明白了,但因为它可能对其他人有用,所以我是这样解决的:

  • 您确实需要运行单独的gunicorn进程才能使django sites framework工作,因为您只能将gunicorn实例指向一个settings.py文件。如果你的网站没有太多的流量,我只会创建一个或两个gunicorn工人每个网站。(我知道,可能还是有点过头了)

  • 理想情况下,您可能希望通过类似这样的方式来管理这些不同的流程,以便更轻松地管理启动/停止/重新启动您的不同站点,但我无法让它正常工作

首先,使用命令行在不同端口的本地主机上启动gunicorn服务器。例:

gunicorn_django-w2-b127.0.0.1:1000/path/to/my/django/project/site1_settings.py--守护进程

gunicorn_django-w2-b127.0.0.1:1001/path/to/my/django/project/site2_settings.py--守护进程

您现在有2个django站点在本地主机上运行,端口为1000和1001(您可以使用任何端口套件)

现在您需要创建两个单独的nginx服务器配置文件,将每个域名指向其各自的django站点。 例:

然后为第二个站点创建nginx配置的副本,但将服务器名称和代理传递更改为站点2的值

确保主nginx.conf文件中包含服务器配置文件

重新加载nginx,您就可以开始了


如果有人有更简单/更好的方法,请发布。

您是否使用网站框架?您是否必须为您托管的每个站点创建settings.py?是的,我使用的是站点框架,每个站点都有一个覆盖应用程序全局设置的
settings.py
。目前,我正在使用Gunicorn从其特定的
settings.py
运行一个站点。您会覆盖一种设置吗?也许您可以将其存储在同样由sites框架管理的表中?AFAIK gunicorn没有虚拟主机支持。也许可以试试uwsgi?我们会覆盖各种设置,主要设置是站点ID,但有时也会
安装应用程序来添加自定义模块。我想你是对的,uWSGI可能是我最好的选择。今天早上我简单地研究了一下,virtualhosts的东西看起来正是我想要的。干杯
server {
    listen 80;
    server_name website1.com;
    client_max_body_size 4G;

    keepalive_timeout 4;

    location /media {
        root /path/to/my/django/project/media; #this servers your static files
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header HOST $http_host;
        proxy_redirect off;

        if (!-f $request_filename){
            proxy_pass http://127.0.0.1:1000; #point to the django site already running on local host
            break;
        }
    }

    #add in any additional nginx configuration such as support for 500 errors or proxy apache to server php files etc.
}