2011-10-30 9 views
9

Nginxとuwsgiを使用して同じサーバー上で複数のdjangoサイトを実行することはできますか?Nginxとuwsgiで複数のdjangoサイトを実行するには?

私は複数のuwsgiインスタンス(各サイトに1つ)を実行するために必要と思われました。 /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インスタンスを実行するソリューションは、2番目のリンクにありました。 uwsgi --uid 1001 -w customer1app --limit-as 128 -p 3 -M -s 127.0.0.1:3031 – Thomas

+0

If天皇モードでuwsgiを実行すると、複数のインスタンス(別名vassals)の作成を処理します。 djangoプロジェクトごとにuwsgi設定ファイルが必要です。詳細情報:https://uwsgi.readthedocs.org/en/latest/tutorials/Django_and_nginx.html#emperor-mode – donturner

-1

これは確かに可能です。http://www.simme.org/blog/2013/05/08/deploying-your-django-projects-with-uwsgi/をチェックしてください。これは、uwsgi + nginx経由でdjangoプロジェクトを展開するためのウォークスルーです。

+0

解決策をURLだけで回答を投稿することは、stackoverflow.com外のソリューションには適していません。しかし、あなたはあなたの答えのためのソースへのリンクを使用するか、または詳細を参照することができます。 – Alexey

+2

-1あなたのリンクは、nginxとuwsgiを使って複数のdjangoサイトを同時に実行する方法を説明していません。 – HorseloverFat

4

Emperor Modeを使用すると、uwsgiの複数のインスタンスを実行できます。

これは、新しいワーカーインスタンスの作成を処理します。これらの例は、華麗かつ陽気にvassalsと命名されています。各アバタには設定ファイルが必要です(通常はシンボリックリンクされています)/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サイトは、nginxの設定内の特定のホスト名でのみ提供する必要があることを指定していたにもかかわらず、デフォルトのサーバーIPでもサービスされていたことがわかりました。

1

@ donturnerの回答のような多くの提案があります。つまり、nginxのconfigureファイルに2つ以上の異なるserverを設定します。しかし、問題は各サーバが異なるドメイン名またはサブドメイン名のいずれかのユニークなアドレスを必要とすることです。どのようにこのような状況について:私はこのようなサーバの二つの異なるDjangoプロジェクトにしたい:このように

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

、我々は一つのサーバの設定のすべてを設定することができます。

これはこれは、2つのプロジェクトが使用できるように、あなたはまた、STATIC_URL = '/static_lip/'としてDjangoプロジェクトのsettings.pyファイルの1つを変更する必要が/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; 
    } 
} 

の私の設定です/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 { 
     } 
    } 

} 

の私の設定です静的ファイルを別々に保存します。

新しい発見はnginxです。サーバ静的ファイルはそれ自身でできます。 uwsgiとDjangoを閉じても、これらのファイルをブラウザで使用することができます。

関連する問題