代码之家  ›  专栏  ›  技术社区  ›  Tim Fletcher

通过Gunicorn/Nginx使用Django的站点框架运行多个站点

  •  4
  • Tim Fletcher  · 技术社区  · 14 年前

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

    DJANGO_SETTINGS_MODULE 对于mod\u wsgi到相应站点的 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()
    

    有没有人用Django的站点框架运行Gunicorn,并能给出如何配置它的提示?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Kirk Woll    14 年前

    我也有同样的问题,为了寻找同样的答案,我偶然发现了这个问题。

    我知道这个问题很老了,你现在可能已经明白了,但既然它可能对其他人有用,我就这样解决它:

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

    • supervisord

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

    gunicorn_django-w 2-b 127.0.0.1:1000/path/to/my/django/project/site1_设置.py--守护进程

    gunicorn_django-w 2-b 127.0.0.1:1001/path/to/my/django/project/site2_设置.py--守护进程

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

    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.
    }
    

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

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

    如果有人有一个更容易/更好的方法来做这件事,请张贴它。