Перенаправлять запросы в приложение Django, используя Apache

У меня есть веб-сервер Apache и приложение 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-приложение. Отлично сработано. Теперь у меня есть второе приложение 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>

Теперь мне интересно, как мне настроить его так, чтобы он перенаправлял запросы с localhost: 8080 / django в мое приложение Django.

РЕДАКТИРОВАТЬ

Кажется, я попробовал все на свете. Теперь я просто попытался создать один и только один виртуальный хост для обслуживания моего проекта Django, и мне это не удалось. Вот некоторые предварительные условия, которые у меня есть:

  • Python 2.7.12, MSC 1500 32bit на 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.

Я не знаю, что с этим не так.

РЕДАКТИРОВАТЬ

Это то, что у меня есть в 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

Решение

Вы можете попробовать файл htaccess в корневом каталоге php, я не уверен, но вы что-то вроде:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]