2009-06-19 13 views
22

Tôi hiện có thể chạy hoặc Django thông qua mod_wsgi hoặc PHP trên máy chủ Apache của tôi.Làm cách nào để chạy Django và PHP cùng nhau trên một máy chủ Apache?

Django My dự án thuộc tại địa chỉ: http://localhost và nguồn là ở C:/django_proj

dự án PHP My chạy tại địa chỉ: http://php.localhost và nguồn là ở C:/web

Nếu tôi bật cả trên, php. localhost và localhost đi đến dự án Django. Tôi đã thiết lập chúng thông qua các máy chủ ảo Apache.

Dưới đây là một số dòng có liên quan trong 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" 

Các dòng có liên quan trong apache_django_wsgi.conf là:

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

Bên 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> 

My Dự án PHP hiện tại không thể truy cập được. Có ai có bất kỳ ý tưởng những gì tôi đang mất tích?

Trả lời

29

Tôi chạy hàng tá trang web mod_wsgi/Django, trang web PHP và trang web Rails với một Apache duy nhất.

Chủ yếu được thực hiện bằng máy chủ ảo nhưng tôi có một số máy đang chạy trên cùng một tên miền.

Bạn chỉ cần đặt WSGIScriptAlias /... sau bất kỳ chỉ dẫn Vị trí/Bí danh nào khác.

Cho phép nói, ví dụ: tôi muốn chạy phpMyAdmin trên cùng một miền với trang web Django. Các cấu hình sẽ giống như thế này:

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> 

Sửa:

cấu hình của bạn sẽ giống như thế này:

<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> 

Bạn không cần những <Directory> chỉ trong http.conf .. Làm tất cả các cấu hình của bạn trong các máy chủ ảo.

Ngoài ra, hãy loại bỏ hoàn toàn khối <Directory />.

+0

Đó là tốt để biết, nhưng tôi muốn chỉ dự án Django tôi, tên miền chính của y khi dự án của tôi PHP để một tên miền phụ, ví dụ: http: // localhost -> My Django Proj http: //php.localhost -> My PHP Proj Bạn có biết làm thế nào tôi có thể đạt được ở trên, tôi đã có trên chạy như máy chủ ảo. –

+1

Bạn cần đặt các chỉ thị vào các khối thích hợp. Nói cách khác, đặt WSGIScriptAlias ​​bên trong khối nơi ServerName là localhost. Tôi sẽ làm cho nó rõ ràng hơn bằng cách chỉnh sửa câu trả lời của tôi. –

+0

Cảm ơn sự giúp đỡ của bạn, nó hoạt động. Tôi đã xóa "Bí danh/C:/web" và nó hoạt động tốt ngay bây giờ. Tôi cũng lấy ra các khối Directory từ httpd.conf. –

7

Chỉ thị WSGIScriptAlias/... của bạn đang thông báo cho Apache rằng mọi yêu cầu bắt đầu bằng "/" sẽ được nạp thông qua trình xử lý WSGI của Django. Nếu bạn thay đổi điều đó để đọc WSGIScriptAlias /django-proj/ ... thay vào đó, chỉ yêu cầu bắt đầu bằng "/ django-proj" mới được chuyển vào Django.

Cách khác là bắt đầu thiết lập máy chủ ảo cho từng dự án. Bằng cách này bạn có thể cấu hình Apache để đặt mỗi dự án tại/của miền riêng của nó, và bạn sẽ không cần phải lo lắng về cấu hình cho một dự án ảnh hưởng đến một trong các dự án khác của bạn.

0

Tôi gặp sự cố tương tự. Thử xóa khối này <Directory /> trong httpd-conf.

Bao gồm httpd-vhost.conf và và thử puting tôi WSGIScriptAlias/"/somewhere/file.wsgi" trong phần máy chủ ảo của httpd-vhosts mà lắng nghe cổng 80.

0

Tôi muốn nói thêm rằng nếu bạn đang sử dụng Apache ProxyPass, nó có thể phủ nhận mẫu URL nhất định để nó rơi xuống mod_php.

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