У меня есть веб-сервер Apache и приложение PHP. Все отлично работает. Файл httpd.conf
на данный момент выглядит так:Перенаправление запросов в приложение Django с помощью Apache
...
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")
Таким образом, это только простой Привет мира страница, и она работает. Теперь я хочу использовать сервер Apache, так что, когда я перейду к localhost:8080/django
, я увижу ту же самую домашнюю страницу Hello. Я не знаю, как это реализовать. Многие решения основаны на виртуальных хостах, но я не хочу их настраивать (просто потому, что виртуальные хосты не работают в моей ситуации). Поэтому, если у вас есть предложения, пожалуйста. Благодаря!
EDIT
мне удалось создать виртуальный хост для моего приложения 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.
EDIT
Похоже, я попробовал все в мире. Теперь я просто попытался создать один и только один виртуальный хост, чтобы обслуживать мой проект Django, и я потерпел неудачу. Вот некоторые предварительные условия, которые у меня есть:
- Python 2.7.12, MSC 1500 32bit on 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.
Я не знаю, что в этом плохого.
EDIT
Это то, что у меня есть в настройках.ру:
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = ['localhost']
USE_X_FORWARDED_HOST = True
INTERNAL_IPS = ('127.0.0.1',)
EDIT
Похоже, я попробовал несколько десятков конфигураций виртуального хоста, но ни один из них не работает. Это последняя конфигурация, что я пробовал:
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, я все еще вижу то же Внутреннюю ошибку сервера. Итак, я думаю, теперь мой вопрос должен быть - кто-нибудь использует Apache с Django?
EDIT
Теперь я начинаю верить, что это все из-за 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, я просто установил ее по всему миру.
ты пытался сделать переадресацию с условием на пути/Джанго или правила перезаписи? – Fky
Я не уверен, как это реализовать. – Jacobian
Я бы предложил обновить версию Python до более новой версии. Обычно не рекомендуется использовать модуль mod_wsgi, скомпилированный для новой версии Python, хотя и имеет разницу на уровне патча, с более старой установкой Python. –