web-dev-qa-db-ja.com

1つのApacheサーバーでDjangoとPHPを一緒に実行するにはどうすればよいですか?

現在、ApacheサーバーでDjangoからmod_wsgiまたはPHPのいずれかを実行できます。

私のDjangoプロジェクトは次の場所で実行されます: http:// localhost そしてソースはC:/ Django_projにあります

私のPHPプロジェクトは次の場所で実行されます: http://php.localhost そしてソースはC:/ webにあります

両方をオンにすると、php.localhostとlocalhostはDjangoプロジェクトに移動します。Apache仮想ホストを介して既にセットアップしています。

Httpd.confの関連する行は次のとおりです。

DocumentRoot "C:/web"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "C:/web">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Directory "C:/Django_proj">
    Order allow,deny
    Allow from all
</Directory>

Include "C:/Django_proj/Apache/apache_Django_wsgi.conf"

Apache_Django_wsgi.confの関連行は次のとおりです。

WSGIScriptAlias / "C:/Django_proj/Apache/proj.wsgi"
<Directory "C:/Django_proj/Apache">
    Order allow,deny
    Allow from all
</Directory>

Httpd-vhosts.conf内:

<Directory C:/web>
    Order Deny,Allow
    Allow from all
</Directory>

<Directory C:/Django_proj>
    Order Deny,Allow
    Allow from all
</Directory>

<VirtualHost *:80>
    DocumentRoot "C:/Django_proj"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/web"
    ServerName php.localhost
</VirtualHost>

私のPHPプロジェクトは現在アクセスできません。誰かが私が欠けているアイデアを持っていますか?

23
Thierry Lam

私は数十のmod_wsgi/Djangoサイト、PHPサイト、およびRailsサイトを単一のApacheで実行しています。

これは主に仮想ホストを使用して行われますが、同じドメインで両方を実行しているものもあります。

WSGIScriptAlias /...を他のLocation/Aliasディレクティブの後に置く必要があります。

たとえば、Djangoサイトと同じドメインでphpMyAdminを実行したいとします。設定は次のようになります。

Alias /phpmyadmin /full/path/to/phpmyadmin/
<Directory /full/path/to/phpmyadmin>
   Options -Indexes
   ...etc...
</Directory>

WSGIScriptAlias / /full/path/to/Django/project/app.wsgi
<Directory /full/path/to/Django/project>
    Options +ExecCGI
    ...etc...
</Directory>

編集

構成は次のようになります。

<VirtualHost *:80>
    DocumentRoot "C:/Django_proj"
    ServerName localhost
    WSGIScriptAlias / "C:/Django_proj/Apache/proj.wsgi"
    <Directory "C:/Django_proj/Apache">
        Options +ExecCGI
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "C:/web"
    ServerName php.localhost
    Alias / C:/web
    <Directory C:/web>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

<Directory>...にこれらのhttp.confディレクティブは必要ありません。仮想ホストですべての構成を行います。

また、<Directory />ブロックを完全に取り除きます。

32
Van Gale

WSGIScriptAlias / ...ディレクティブは、「/」で始まるすべてのリクエストがDjangoのWSGIハンドラーを介して供給されるようにApacheに指示しています。代わりにWSGIScriptAlias /Django-proj/ ...を読み取るように変更した場合、「/ Django-proj」で始まるリクエストのみがDjangoに渡されます。

別の方法は、プロジェクトごとに仮想ホストのセットアップを開始することです。このようにして、各プロジェクトを独自のドメインの/に配置するようにApacheを構成でき、1つのプロジェクトの構成が他のプロジェクトの1つに影響を与えることを心配する必要はありません。

8

Apache ProxyPassを使用している場合、特定のURLパターンを拒否してmod_phpに分類される可能性があることを追加したいと思います。

ProxyPass /wordpress !
<Location /wordpress>
    Require all granted
</Location>
0
kunoo

私も同じ問題を抱えていました。 httpd-confでこのブロック<Directory />を削除してみてください。

Httpd-vhost.confをインクルードし、ポート80をリッスンするhttpd-vhostsの仮想ホストセクションにWSGIScriptAlias / "/somewhere/file.wsgi"を配置してみてください。

0
KalamHavij