2012-09-27 2 views
3

Django 응용 프로그램을 개발하고 기본 PHP 기반 사이트와 동일한 서버에서 제공하는 내 원래 Django serving question의 후속 질문이 있습니다 (모두 내 웹 사이트의 더 큰 이전 부분 임). 정적 인 PHP에서부터 일련의 장고 앱에 이르기까지).Django 응용 프로그램의 ProxyPass 및 ProxyPassReverse

mod_wsgi를 사용하여 다른 포트 (8000)에 내 장고 응용 프로그램을 배포 한 대신 제공되는 이름 서버 솔루션을 사용할 수 없습니다. 그러나 이제는 장고 애플리케이션을 메인 사이트에 실제로 통합해야합니다.

http://www.example.com/app/newsletter 

가 성공적으로 프록시를 얻을 것이다 :

여기
ProxyPass  /app/newsletter  http://www.example.com:8000/app/newsletter 
ProxyPassReverse /app/newsletter  http://www.example.com:8000/app/newsletter 

내가 어떤 요구를 할 것으로 기대 : (http://www.example.com 말에 대한) 내 아파치 2.0 구성 파일에서 나는 다음과 같은 ProxyPass로는 (내 mod_wsgi에 초기화 후) 명령 추가 ~까지 :

http://www.example.com:8000/app/newsletter 

그리고 모든 것이 세계와 맞을 것입니다.

그러나이 경우는 아닙니다. 아파치는 다음 5 정도 분 (이 질문을 정교하게하는 데 걸리는 시간)을 위해 달려 502 프록시 오류 뱉어 : 나는 다음과 같은 연속 오류를 볼이 응답 한 후 내 아파치 2.0 오류 로그를보고

Proxy Error 

The proxy server received an invalid response from an upstream server. 
The proxy server could not handle the request GET /app/newsletter/. 

Reason: Error reading from remote server 

를 :

[Thu Sep 27 15:25:49 2012] [error] Exception KeyError: KeyError(****,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored 

그래서 mod_proxy가 Django 및/또는 Python과 연동되는 방식으로 뭔가 이상한 점이있는 것 같습니다. 나는 ProxyPass와 ProxyPassReverse를 사용하는 다른 Java 관련 프로세스를 가지고 있으며 잘 작동한다. 또한, ProxyPass를 적용하려고하지 않으면 Django 응용 프로그램이 모두 잘 작동합니다 (즉, 포트 8000에서 직접 주소를 지정할 때).

아이디어가 있으십니까? 내가하는 일이 특히 복잡한 것처럼 느껴지지 않습니다.

미리 감사드립니다.

+0

모든 것이 동일한 서버에 있으므로 mod_proxy보다는 mod_rewrite를 사용해야한다는 것이 좋습니다. – tatlar

답변

2

결국 mod_rewrite을 사용하는 것이 해결책이었습니다. Apache의 httpd.conf 파일에 다음을 추가했습니다.

RewriteEngine On 
RewriteRule ^/app/newsletter/(.*)$ http://%{SERVER_NAME}:8000%{REQUEST_URI} [P] 

모든 것이 예상대로 작동합니다.

+0

이것은 완전히 문제를 해결하지 못했습니다. Django ** get_absolute_url ** 메소드는 항상 작동하는 것은 아니며 때때로 생성하는 링크에 포트 번호 (8000)를 남겨 둡니다. – tatlar

+0

** get_absolute_url() **을 제거하고 ** {% url "명명 된 뷰"%} ** 구문으로 대체하여 100 %가 수정되었습니다. – tatlar

관련 문제