2017-06-14 7 views
0

私は、いくつかのDjangoアプリケーションをホストしたいEC2 AWSサーバーを持っています。これらのアプリはそれぞれ独自のURLを持っています。例えば、複数のWSGIアプリケーションをApache上の異なる仮想ホストとして提供

example1.com example2.com

自体、example1.com作品に。問題は、example2.comを同時に処理することです。私はexample2.comを訪問すると

、私はエラーを取得:

DisallowedHost at/
Invalid HTTP_HOST header: 'example2.com'. You may need to add 'example2.com' to ALLOWED_HOSTS. 
Request Method: GET 
Request URL: http://example2.com 
Django Version: 1.9.13 
Exception Type: DisallowedHost 
Exception Value:  
Invalid HTTP_HOST header: 'example2.com'. You may need to add 'example2.com' to ALLOWED_HOSTS. 
Exception Location: /var/www/vhosts/example1/example1-env/lib/python3.5/site-packages/django/http/request.py in get_host, line 109 
Python Executable: /usr/bin/python3 
Python Version: 3.5.1 
Python Path:  
['/usr/lib64/python3.5', 
'/usr/lib64/python3.5/plat-linux', 
'/usr/lib64/python3.5/lib-dynload', 
'/usr/local/lib64/python3.5/site-packages', 
'/usr/local/lib/python3.5/site-packages', 
'/usr/lib64/python3.5/dist-packages', 
'/usr/lib/python3.5/dist-packages', 
'/var/www/vhosts/example1/', 
'/var/www/vhosts/example1/example1-env/lib/python3.5/site-packages'] 
Server time: Wed, 14 Jun 2017 20:31:27 +0000 

あなたが見ることができるように、何とかApacheはそれがexample2.comを提供していたときにexample1.comの仮想環境を使用しようとしています。どうすればそれを修正できますか?それぞれには独自のvirtualenvを提供する必要があります。

<VirtualHost *:80> 
     # This is name based virtual hosting. So place an appropriate server name 
     # here. Example: django.devsrv.local 
     ServerName example1.com 

     WSGIDaemonProcess example1 python-home=/var/www/vhosts/example1/example1-env 
     WSGIProcessGroup %{GLOBAL} 

     # Insert the full path to the wsgi.py-file here 
     WSGIScriptAlias//var/www/vhosts/example1/example1/wsgi.py 

     <Directory /var/www/vhosts/example1/> 
      Require all granted 
     </Directory> 

     Alias /static/ /var/www/vhosts/example1/static/ 

     <Directory /var/www/vhosts/example1/static/> 
     Order deny,allow 
     Allow from all 
     </Directory> 

     Alias /media/ /var/www/vhosts/example1/media/ 
     <Directory /var/www/vhosts/example1/media/> 
     Order deny,allow 
     Allow from all 
     </Directory> 

    </VirtualHost> 

    <VirtualHost *:80> 
     # This is name based virtual hosting. So place an appropriate server name 
     # here. Example: django.devsrv.local 
     ServerName example2.com 
     WSGIDaemonProcess example2 python-home=/var/www/vhosts/example2/example2-env 
     WSGIProcessGroup %{GLOBAL} 

     # Insert the full path to the wsgi.py-file here 
     WSGIScriptAlias//var/www/vhosts/example2/example2/wsgi.py 

     <Directory /var/www/vhosts/example2/> 
      Require all granted 
     </Directory> 

     Alias /static/ /var/www/vhosts/example2/static/ 

     <Directory /var/www/vhosts/example2/static/> 
     Order deny,allow 
     Allow from all 
     </Directory> 

     Alias /media/ /var/www/vhosts/example2/media/ 
     <Directory /var/www/vhosts/example2/media/> 
     Order deny,allow 
     Allow from all 
     </Directory> 
    </VirtualHost> 

編集:

はここでApacheの設定ファイルである はコメントでいくつかの提案を読んでたので、私はこれに来ています。これはまだ動作しません。

ServerName example1.com 

WSGIDaemonProcess example1 display-name=%{GROUP} python-path=/var/www/vhosts/example1/ python-home=/var/www/vhosts/example1/example1-env/ 
WSGIApplicationGroup %{GLOBAL} 
WSGIProcessGroup example1 

# Insert the full path to the wsgi.py-file here 
WSGIScriptAlias//var/www/vhosts/example1/example1/wsgi.py process-group=example1 

...

ServerName example2.com 

WSGIDaemonProcess example2 display-name=%{GROUP} python-home=/var/www/vhosts/example2/example2-env/ python-path=/var/www/vhosts/example2/ 
WSGIApplicationGroup %{GLOBAL} 
WSGIProcessGroup example2 

# Insert the full path to the wsgi.py-file here 
WSGIScriptAlias//var/www/vhosts/example2/example2/wsgi.py process-group=example2 
+0

このエラーは、仮想環境とは何の関係もありません。あなたはsettings.pyの許可されたホストにexample2.comを追加する必要があります。 – giaco

+0

あなたはポイントがありません。エラーがexample1から来るので解決しませんenv Python – MadPhysicist

+1

あなたは誤って '' WSGIProcessGroup''を設定しています。 ''%{GLOBAL} ''ではなく、仮想ホストのデーモンプロセスグループの名前でなければなりません。おそらく '' WSGIApplicationGroup%{GLOBAL} ''をお勧めしますが、それでも '' WSGIProcessGroup''が必要です。 http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.htmlを読んでください。 –

答えて

0

私のために働いた次のような構成。要するに、example1.comexample2.comの2つの異なるDjangoアプリケーションをそれぞれの仮想環境で使用します。

あなたが見ることができるように、ServerAliasServerNameを挿入することは、コミュニティによって提案されたことにより、他の修正のカップルと一緒に、すべての違いを作りました。

Apacheの設定:

<IfModule !wsgi_module> 
LoadModule wsgi_module modules/mod_wsgi.so 
</IfModule> 

<VirtualHost *:80> 

    ServerName www.example1.com 
    ServerAlias example1.com 

    WSGIDaemonProcess example1 display-name=%{GROUP} python-path=/var/www/vhosts/example1/ python-home=/var/www/vhosts/example1/example1-env/ 
    WSGIApplicationGroup %{GLOBAL} 
    WSGIProcessGroup example1 


    # Insert the full path to the wsgi.py-file here 
    WSGIScriptAlias//var/www/vhosts/example1/example1/wsgi.py process-group=example1 

    <Directory /var/www/vhosts/example1/> 
     Require all granted 
    </Directory> 

    Alias /static/ /var/www/vhosts/example1/static/ 

    <Directory /var/www/vhosts/example1/static/> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    Alias /media/ /var/www/vhosts/example1/media/ 
    <Directory /var/www/vhosts/example1/media/> 
    Order deny,allow 
    Allow from all 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 

    ServerName www.example2.com 
    ServerAlias example2.com 

    WSGIDaemonProcess example2 display-name=%{GROUP} python-home=/var/www/vhosts/example2/example2-env/ python-path=/var/www/vhosts/example2/ 
    WSGIApplicationGroup %{GLOBAL} 
    WSGIProcessGroup example2 

    # Insert the full path to the wsgi.py-file here 
    WSGIScriptAlias//var/www/vhosts/example2/example2/wsgi.py process-group=example2 

    <Directory /var/www/vhosts/example2/> 
     Require all granted 
    </Directory> 

    Alias /static/ /var/www/vhosts/example2/static/ 

    <Directory /var/www/vhosts/example2/static/> 
    Order deny,allow 
    Allow from all 
    </Directory> 

    Alias /media/ /var/www/vhosts/example2/media/ 
    <Directory /var/www/vhosts/example2/media/> 

</VirtualHost> 
+0

仮想ホストの動作に '' ServerAlias''は必要ありません。真に '' www''なしでホスト名で訪問する必要がある場合は '' ServerAlias''だけが必要です。 '' WSGIScriptAlias''に '' process-group''オプションがあるので、 '' WSGIProcessGroup''は冗長です。'' WSGIScriptAlias''に '' application-group''オプションを使って '' WSGIApplicationGroup''を削除することもできますが、 '' WSGIScriptAlias''の両方のオプションを使うとWSGIスクリプトのプリロードが可能になることに注意してくださいプロセス起動時。 –

関連する問題