2011-10-30 56 views
9

是否有可能使用Nginx和uwsgi在同一台服务器上运行多个django站点?如何在Nginx和uwsgi上运行多个django站点?

我认为有必要运行多个uwsgi实例(每个站点一个)。我将/etc/init.d/uwsgi复制到uwsgi2并更改了端口号。但是,我得到以下错误:

# /etc/init.d/uwsgi2 start 
Starting uwsgi: /usr/bin/uwsgi already running. 

怎么可能运行多个uwsgi实例?

感谢

+0

我认为这是同一个问题在serverfault, http://serverfault.com/questions/498994/how-to-run-multiple-websites-from-one-django-project-on-nginx-and -uwsgi/549337#549337 – MrTeera

回答

9

您可以创建创建多个虚拟主机,使您可以承载多个站点,相互独立。更多的信息在这里:http://wiki.nginx.org/VirtualHostExample

这里有一些更详细的信息以及如何设置虚拟主机http://projects.unbit.it/uwsgi/wiki/RunOnNginx#VirtualHosting

+0

运行2个uwsgi实例的解决方案位于第二个链接中: uwsgi --uid 1001 -w customer1app --limit-as 128 -p 3 -M -s 127.0.0.1:3031 – Thomas

+0

If你在Emperor模式下运行uwsgi它会处理多个实例(又名封套)的创建。每个django项目只需要一个uwsgi配置文件。更多信息:https://uwsgi.readthedocs.org/cn/latest/tutorials/Django_and_nginx.html#emperor-mode – donturner

4

您可以使用Emperor Mode运行uwsgi的多个实例。

这处理新工作者实例的创建。这些实例出色而热闹地命名为vassals。每个vassal只需要一个配置文件,它通常放在(或符号链接的)/etc/uwsgi/vassals

对于nginx,您需要为每个想要为其服务的主机创建一个服务器块。只需更改要为其提供服务的每台主机的server_name指令。这里有一个例子:

#Simple HTTP server 
server { 
    listen 80; 
    root /usr/share/nginx/www; 
    server_name host1.example.com; 
} 

#Django server 
server { 
    listen 80; 
    server_name host2.example.com; 

    #...upstream config... 
} 

重要:请确保您已在/etc/hosts指定主机名。我发现,如果没有这样做,我的django网站也会在默认服务器IP上提供服务,尽管指定它只应在我的nginx配置中的特定主机名上提供。

1

我看到很多建议,像@ donturner的答案。即在nginx配置文件中设置两个或更多不同的server。但问题是每个服务器都需要一个独特的server_name或者不同的域名或者子域名。怎么样这样的情况:我想服务器的两个不同的Django项目是这样的:

www.ourlab.cn/site1/ # first Django project 
www.ourlab.cn/site2/ # second Django project 

这样,我们就可以在一台服务器配置所有的设置

这是我在/etc/nginx/nginx.conf

# For more information on configuration, see: 
# * Official English Documentation: http://nginx.org/en/docs/ 
# * Official Russian Documentation: http://nginx.org/ru/docs/ 

user nginx; 
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /run/nginx.pid; 

# Load dynamic modules. See /usr/share/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 

events { 
    worker_connections 1024; 
} 

http { 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile   on; 
    tcp_nopush   on; 
    tcp_nodelay   on; 
    keepalive_timeout 65; 
    types_hash_max_size 2048; 

    include    /etc/nginx/mime.types; 
    default_type  application/octet-stream; 

    # Load modular configuration files from the /etc/nginx/conf.d directory. 
    # See http://nginx.org/en/docs/ngx_core_module.html#include 
    # for more information. 
    include /etc/nginx/conf.d/*.conf; 

    server { 
     listen  80 default_server; 
     listen  [::]:80 default_server; 
     server_name _; 
     root   /usr/share/nginx/html; 

     # Load configuration files for the default server block. 
     include /etc/nginx/default.d/*.conf; 

     location/{ 
     } 

     error_page 404 /404.html; 
      location = /40x.html { 
     } 

     error_page 500 502 503 504 /50x.html; 
      location = /50x.html { 
     } 
    } 

} 

设置这是我在/etc/nginx/conf.d/self_configure.conf

# /etc/nginx/conf.d/self_configure.conf 
server { 
    listen  80; 
    server_name www.ourlab.cn; 

    # note that these lines are originally from the "location /" block 
    root /mnt/data/www/ourlab; 
    index index.php index.html index.htm; 

    location/{ 
     try_files $uri $uri/ =404; 
    } 
    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

    # Django media 
    location /media { 
     # your Django project's media files - amend as required 
     alias /mnt/data/www/metCCS/metCCS/static/media; 
    } 

    location /static { 
     # your Django project's static files - amend as required 
     # first project's static files path 
     alias /mnt/data/www/metCCS/metCCS/static/static_dirs; 
    } 
    location /static_lip { 
     # second project's static files path 
     alias /mnt/data/www/lipidCCS/lipidCCS/static/static_dirs; 
    } 

    # match www.ourlab.cn/metccs/* 
    location ~* ^/metccs { 
     include  uwsgi_params; 
     uwsgi_pass unix:/run/uwsgi/metCCS.sock; 
    } 
    # match www.ourlab.cn/lipidccs/* 
    location ~* ^/lipidccs { 
     include  uwsgi_params; 
     uwsgi_pass unix:/run/uwsgi/lipidCCS.sock; 
    } 
} 

您还需要改变Django项目的settings.py文件STATIC_URL = '/static_lip/'的一个设置,所以两个项目可以使用他们的静态文件分开。

新的发现是nginx可以自己服务器静态文件。即使我们关闭uwsgi和Django,我们也可以通过浏览器使用这些文件。

相关问题