使用Apache将请求重定向到Django应用程序

时间:2016-12-02 10:00:35

标签: php python django apache mod-wsgi

我有一个Apache Web服务器和一个PHP应用程序。这一切都很棒。此时的httpd.conf文件看起来像这样:

...
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时,它一切正常。所以,当我转到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世界页面而且有效。现在我想要的是使用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>

现在我想知道,我应该如何配置它来将请求从localhost:8080 / django重定向到我的Django应用程序。

修改

似乎我在世界上尝试了一切。现在我只是尝试创建一个且只有一个虚拟主机来为我的Django项目提供服务而且我失败了。以下是我的一些先决条件:

  • Python 2.7.12,win32上的MSC 1500 32位。
  • Apache / 2.4.23(Win64),VC10
  • mod_wsgi-py27-VC9.so for 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时,我得到了#34;内部服务器错误&#34;。这是来自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.

我不知道这有什么问题。

修改

这就是我在settings.py中的内容:

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重新启动很好,但是当我转到localhost:8080时,我仍然看到完全相同的内部服务器错误。所以,我想现在我的问题应该是 - 有没有人使用Apache与Django?

修改

现在我开始相信这一切都是因为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的虚拟环境,我只是全局安装它。

1 个答案:

答案 0 :(得分:0)

你可以在root 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]