2016-12-02 2 views
1

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

+0

ты пытался сделать переадресацию с условием на пути/Джанго или правила перезаписи? – Fky

+0

Я не уверен, как это реализовать. – Jacobian

+1

Я бы предложил обновить версию Python до более новой версии. Обычно не рекомендуется использовать модуль mod_wsgi, скомпилированный для новой версии Python, хотя и имеет разницу на уровне патча, с более старой установкой Python. –

ответ

0

Вы можете попробовать файл 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

Извините, если я не подчеркивал, если хорошо, но я не хочу использовать сервер по умолчанию Django, который не предназначен для производства. Именно поэтому я добавил wsgi_module в httpd.conf. – Jacobian

+0

ok затем измените Listen 8080 на Listen 8081 и перезапустите apache – Fky

+0

И я должен указать что-нибудь connec ted to wsgi? Я спрашиваю об этом, потому что запрос перенаправляется на приложение Django. Это не просто еще один PHP-скрипт, который должен обрабатывать этот запрос – Jacobian

 Смежные вопросы

  • Нет связанных вопросов^_^