2016-12-02 54 views
1

我有一个Apache Web服务器和一个PHP应用程序。这一切都很好。该httpd.conf文件在这一刻看起来像这样:使用Apache将请求重定向到Django应用程序

... 
LoadModule wsgi_module modules/mod_wsgi.so 
... 
Listen 8080 
DocumentRoot "c:/Apache242/htdocs" 
<Directory "c:/Apache242/htdocs"> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 
<IfModule dir_module> 
    DirectoryIndex index.html index.php 
</IfModule> 

正如你所看到的,我已经下载了mod_wsgi.so,当我重新启动Apache这一切都OK。所以,当我去localhost:8080时,我看到我的PHP应用程序正在运行。做得好。现在,我有第二个teene-weeny Django应用程序。它甚至不是一个完整的应用程序,因为它的作用是回答来自同一个PHP应用程序的某个请求。不过,我会称之为Django应用程序。我运行它,像这样:

C:\django\project> python manage.py runserver 127.0.0.1:8081 

正如你可以看到我运行一个非生产服务器,但它的作品好。当我去127.0.0.1:8081,我看到我的索引视图返回的结果:

def index(request): 
    return HttpResponse("Hello, world") 

所以,它只是一个简单的Hello World页面和它的作品。现在我想要的是使用Apache服务器,所以当我去localhost:8080/django时,我会看到非常相同的Hello World页面。我不知道如何实现这一点。许多解决方案都基于虚拟主机,但我不想配置它们(仅仅因为虚拟主机不适用于我的情况)。所以,如果您有任何建议,欢迎您。谢谢!

编辑

我设法创建我的PHP应用程序的虚拟主机。因此,在httpd-vhosts.conf文件看起来像这样:

Listen 8080 
<VirtualHost *:8080> 
    DocumentRoot "c:/Apache242/htdocs" 
    <Directory c:/Apache242/htdocs> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Order Deny,Allow 
     Allow from all 
    </Directory> 
    DirectoryIndex index.php 
</VirtualHost> 

现在我不知道,我应该如何配置它从本地主机重定向请求:8080/Django的我Django应用程序。

编辑

好像我试图在世界上的一切。现在我试图创建一个且只有一个虚拟主机来服务我的Django项目,但我失败了。这里有一些先决条件,我有:

  • python 2.7.12,MSC 1500 32位在win32上。
  • 的Apache/2.4.23(Win64的),VC10
  • mod_wsgi-py27-VC9.so为Apache24-Win64的-VC10

这是我的虚拟主机文件看起来像现在:

Listen 8080 
<VirtualHost *:8080> 
    DocumentRoot "C:/Apache242/htdocs/django" 
    ServerName localhost 
    WSGIScriptAlias/"C:/Apache242/htdocs/django/accent/wsgi.py" 
    <Directory "C:/Apache242/htdocs/django/accent"> 
     Options +ExecCGI 
     Order allow,deny 
     Allow from all 
    </Directory> 

当我重新加载Apache时,我看到它都没问题。大。但是,当我去localhost:8080,我得到“内部服务器错误”。这是来自Apache错误日志的整个堆栈跟踪:

[Fri Dec 02 14:02:33.340929 2016] [mpm_winnt:notice] [pid 8212:tid 300] AH00430: Parent: Child process 9532 exited successfully. 
[Fri Dec 02 14:02:34.241980 2016] [wsgi:warn] [pid 4652:tid 300] mod_wsgi: Compiled for Python/2.7.9+. 
[Fri Dec 02 14:02:34.242980 2016] [wsgi:warn] [pid 4652:tid 300] mod_wsgi: Runtime using Python/2.7.6. 
[Fri Dec 02 14:02:34.242980 2016] [mpm_winnt:notice] [pid 4652:tid 300] AH00455: Apache/2.4.23 (Win64) mod_wsgi/4.4.6 Python/2.7.6 configured -- resuming normal operations 
[Fri Dec 02 14:02:34.242980 2016] [mpm_winnt:notice] [pid 4652:tid 300] AH00456: Apache Lounge VC10 Server built: Jul 9 2016 11:59:00 
[Fri Dec 02 14:02:34.242980 2016] [core:notice] [pid 4652:tid 300] AH00094: Command line: 'C:\\Apache242\\bin\\httpd.exe -d C:/Apache242' 
[Fri Dec 02 14:02:34.245981 2016] [mpm_winnt:notice] [pid 4652:tid 300] AH00418: Parent: Created child process 10960 
[Fri Dec 02 14:02:34.695006 2016] [wsgi:warn] [pid 10960:tid 172] mod_wsgi: Compiled for Python/2.7.9+. 
[Fri Dec 02 14:02:34.696006 2016] [wsgi:warn] [pid 10960:tid 172] mod_wsgi: Runtime using Python/2.7.6. 
[Fri Dec 02 14:02:34.753010 2016] [mpm_winnt:notice] [pid 10960:tid 172] AH00354: Child: Starting 64 worker threads. 
[Fri Dec 02 14:02:54.295127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] mod_wsgi (pid=10960): Target WSGI script 'C:/Apache24/htdocs/django/accent/wsgi.py' cannot be loaded as Python module. 
[Fri Dec 02 14:02:54.295127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] mod_wsgi (pid=10960): Exception occurred processing WSGI script 'C:/Apache24/htdocs/django/accent/wsgi.py'. 
[Fri Dec 02 14:02:54.295127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] Traceback (most recent call last): 
[Fri Dec 02 14:02:54.295127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:/Apache24/htdocs/django/accent/wsgi.py", line 13, in <module> 
[Fri Dec 02 14:02:54.296127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django.core.wsgi import get_wsgi_application 
[Fri Dec 02 14:02:54.296127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\core\\wsgi.py", line 2, in <module> 
[Fri Dec 02 14:02:54.296127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django.core.handlers.wsgi import WSGIHandler 
[Fri Dec 02 14:02:54.296127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\core\\handlers\\wsgi.py", line 11, in <module> 
[Fri Dec 02 14:02:54.297127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django import http 
[Fri Dec 02 14:02:54.297127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\http\\__init__.py", line 1, in <module> 
[Fri Dec 02 14:02:54.297127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django.http.cookie import SimpleCookie, parse_cookie 
[Fri Dec 02 14:02:54.297127 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\http\\cookie.py", line 3, in <module> 
[Fri Dec 02 14:02:54.298128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django.utils.encoding import force_str 
[Fri Dec 02 14:02:54.298128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\utils\\encoding.py", line 10, in <module> 
[Fri Dec 02 14:02:54.298128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  from django.utils.six.moves.urllib.parse import quote 
[Fri Dec 02 14:02:54.298128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\utils\\six.py", line 90, in __get__ 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  result = self._resolve() 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\utils\\six.py", line 158, in _resolve 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  module = _import_module(self.mod) 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\lib\\site-packages\\django-1.7.11-py2.7.egg\\django\\utils\\six.py", line 80, in _import_module 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  __import__(name) 
[Fri Dec 02 14:02:54.299128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\Lib\\urllib.py", line 26, in <module> 
[Fri Dec 02 14:02:54.301128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  import socket 
[Fri Dec 02 14:02:54.301128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] File "C:\\Python27\\Lib\\socket.py", line 47, in <module> 
[Fri Dec 02 14:02:54.301128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990]  import _socket 
[Fri Dec 02 14:02:54.301128 2016] [wsgi:error] [pid 10960:tid 752] [client ::1:54990] ImportError: DLL load failed: %1 \xed\xe5 \xff\xe2\xeb\xff\xe5\xf2\xf1\xff \xef\xf0\xe8\xeb\xee\xe6\xe5\xed\xe8\xe5\xec Win32. 

我不知道那是什么问题。

编辑

这是我在设置。潘岳:

DEBUG = True 

TEMPLATE_DEBUG = True 

ALLOWED_HOSTS = ['localhost'] 

USE_X_FORWARDED_HOST = True 

INTERNAL_IPS = ('127.0.0.1',) 

编辑

好像我试过几十个虚拟主机配置的,但他们没有工作。这是最后的配置,那我想:

Listen 8080 
WSGIPythonPath C:/Apache242/htdocs/django 
<VirtualHost *:8080> 
    DocumentRoot "C:/Apache242/htdocs/django" 
    ServerName localhost 
    WSGIScriptAlias/C:/Apache242/htdocs/django/accent/wsgi.py 
    <Directory C:/Apache242/htdocs/django/accent> 
    <Files wsgi.py> 
     Order deny,allow 
     Allow from all 
    </Files> 
    </Directory> 
    LogLevel warn 
</VirtualHost> 

的Apache重新启动很好,但是当我去到本地主机:8080,我仍然看到非常相同的内部服务器错误。所以,我想现在我的问题应该是 - 是否有人在Django上使用Apache?

编辑

现在我开始相信这一切都因为wsgi.py文件。在我的情况是这样的:

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "accent.settings") 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

但我不知道如何解决它。 PS。我没有Python的虚拟环境,我只是在全球安装它。

+0

做你试图做一个重定向与路径/ Django的或重写规则条件? – Fky

+0

我不知道如何实现这一点。 – Jacobian

+1

我建议将你的Python版本升级到更新的版本。使用为更新的Python版本编译的mod_wsgi模块通常不是一个好主意,即使只是一个补丁级别的差异,而使用较旧的Python安装。 –

回答

0

您可以尝试在根php目录的htaccess文件,我不知道,但你是这样的:

Options -Indexes 
Options -Multiviews 
Options +FollowSymLinks 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^/django(.*)$ http://127.0.0.1:8081$1 [L,QSA] 
+0

对不起,如果我没有强调的话,但是我不想使用Django的默认服务器,这不是用于生产的,这就是为什么我在httpd.conf中添加了wsgi_module。 – Jacobian

+0

ok然后将Listen 8080更改为Listen 8081,然后重新启动apache – Fky

+0

并且我应该指定任何连接结识wsgi?我问这个,因为请求被重定向到Django应用程序。这不只是另一个PHP脚本,应该处理这个请求 – Jacobian

相关问题