61

Debian 5を使用する同じサーバーの下で複数のサイトをホストしたいと思います。たとえば、、、を使用し、IPが次のようになってsite1いるsite2site3仮定します。155.55.55.1

site1: 155.55.55.1:80  , script at /opt/django/site1/
site2: 155.55.55.1:8080, script at /opt/django/site2/
site3: 155.55.55.1:8090, script at /opt/django/site3/

これが私のapacheのデフォルトです:

<VirtualHost *:80>
    ServerName /
    ServerAlias  */
    DocumentRoot /opt/django/site1/
    LogLevel warn
    WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
    Alias /media /opt/django/site1/media/statics
    Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media 
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/share/phpmyadmin"
    ServerName /phpmyadmin
    Alias /phpmyadmin /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

site1そして、これが私のwsgi構成です/opt/django/site1/apache/django.wsgi

import os, sys
import django.core.handlers.wsgi

sys.path.append('/opt/django')
sys.path.append('/opt/django/site1')

os.environ['DJANGO_SETTINGS_MODULE'] = 'site1.settings'
application = django.core.handlers.wsgi.WSGIHandler()

Djangoベースのサイトであるとsite2を追加するにはどうすればよいですか?site3site1

4

2 に答える 2

108

ServerName/ServerAliasディレクティブが間違っています。ServerNameはホスト名である必要があります。おそらくServerAliasを削除する必要があります。

次に、ファイルシステム内のスクリプトのポート番号と場所を変更するだけで、明白で重複したVirtualHost/Listenディレクティブを実行します。

最後に、DocumentRootをDjangoコードがある場所に設定しないでください。これにより、Apache構成を詰め込んだ場合に、ダウンロードするソースコードを誤って公開しやすくなります。したがって、DjangoサイトのVirtualHostからDocumentRootディレクティブを削除するだけです。

Listen 80

<VirtualHost *:80>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
Alias /media /opt/django/site1/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site1/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site2/apache/django.wsgi
Alias /media /opt/django/site2/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site2/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8090

<VirtualHost *:8090>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site3/apache/django.wsgi
Alias /media /opt/django/site3/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site3/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

また、静的ファイルへのアクセスを許可するための欠落しているDirectoryディレクティブを追加しました。ただし、パスを確認する必要があります。

必ずお読みください:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

詳細については。


更新1

ところで、同じApacheでPHPを使用しているので、mod_wsgiデーモンモードを使用して、各Djangoインスタンスを独自の個別のプロセスにプッシュする方がはるかに良いでしょう。これにより、PHPのためにメインのApacheプロセスがシングルスレッドに強制されている場合でも、これらのプロセスをマルチスレッド化できます。最終的には、プリフォークMPMを使用した組み込みモードで各プロセスで複数のDjangoインスタンスを実行する場合よりも、使用されるメモリがはるかに少なくなります。Djangoコードはスレッドセーフである必要があります。上記に加えて、WSGIDaemonProcess /WSGIProcessGroupを各DjangoVirtualHostに追加する構成になります。ここで、デーモンプロセスグループの名前はVirtualHostごとに異なります。

<VirtualHost *:80>
WSGIDaemonProcess site1 display-name=%{GROUP}
WSGIProcessGroup site1
... existing stuff
</VirtualHost>

<VirtualHost *:8080>
WSGIDaemonProcess site2 display-name=%{GROUP}
WSGIProcessGroup site2
... existing stuff
</VirtualHost>

<VirtualHost *:8090>
WSGIDaemonProcess site3 display-name=%{GROUP}
WSGIProcessGroup site3
... existing stuff
</VirtualHost>

これにより、Apache全体を再起動せずに、各Djangoインスタンスをより簡単に再起動することもできます。読む:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

于 2009-10-12T10:13:05.123 に答える
2

すべてのvirtualHost構成を1つの場所に配置することは問題なく機能しますが、Debianには、/ etc / apache2 / sites-available内のサイトごとにファイルに分割するという独自の概念があり、../sites-enabledでそれらをシンボリックリンクすることでアクティブ化されます。このようにして、server-adminは、site-admin unixユーザーごとに、構成ファイルに個別のアクセス権を割り当てることもできます。スクリプトは、サイトがアクティブかどうかを確認できます。

基本的に、Django-Adminのインストールに関する中心的なハウツーが1つあると便利です。現在の多数の個別のドキュメント、リンク、ブログ記事は、Djangoの普及にはあまり役立ちません。

于 2013-11-02T12:16:43.797 に答える