ProxyPass 사용법을 이해하도록 도와주세요


11

업데이트 : 나는 아래 두 가지 답변을 가지고 놀면서 수정 된 질문을 추가했습니다.

안녕,

이 글을 읽고 있다면 아마도 Apache의 mod_proxy와 ProxyPass 기능에 익숙 할 것입니다. 다른 많은 사람들과 마찬가지로 내부 네트워크 외부에서 액세스 할 수있는 응용 프로그램이 있지만 응용 프로그램 자체가 다른 컴퓨터의 다른 내부 응용 프로그램에 액세스하는 문제가 있으며이 설정으로 원격 액세스하면 문제가 발생합니다.

그래서 내 설정은 매우 간단합니다.

컴퓨터 # 1은 원격 액세스가 가능하며 호스트 이름을 통해 액세스하며 PHP 응용 프로그램을 실행합니다.

Machine # 2는 Django를 실행하는 새로운 응용 프로그램으로, 완전히 다른 백엔드 (인증)를 사용하며 별도의 시스템에서 호스팅됩니다. 인트라넷에서는 기본적으로 내부 192.168.0.101 ip에 연결되는 간단한 호스트 이름을 통해 액세스합니다.

예를 들어, / new로 전달하면 새 응용 프로그램으로 전달됩니다.

ProxyPass / 새로운 http://192.168.0.101/

이런 종류의 작품은 다른 앱으로 요청을 받지만 Django 앱이 / auth / login /으로 리디렉션하려고하기 때문에 중단됩니다. 이는 즉시 인식하지 못합니다. URL을 foo.net/new/auth/login으로 수정하면 로그인 페이지가 표시되지만 브라우징 전체 에서이 작업을 수행하는 것은 편리하지 않습니다.

ProxyPass를 원하는대로 작동 시키려면 어떻게해야합니까? Apache로 무언가를해야합니까? 그렇기 때문에 항상 다른 앱에서 url 앞에 / new를 쓰거나 Django 앱에서 수정해야합니까?

모든 팁과 조언도 대단히 감사하겠습니다. 시간 내 줘서 고마워

답변:


11

django 응용 프로그램을 / auth / login 대신 / new / auth / login에 있도록 수정해야합니다. 일반적으로 프록시 패스는 다음과 같아야합니다.

ProxyPass /path http://192.168.0.101/path
ProxyPassReverse /path http://192.168.0.101/path

/ new /에있을 것으로 예상되는 Django 앱과 결합하여 문제를 해결해야합니다.


2

VirtualHost를 사용하십시오. 예를 들어, 서버의 A 이름 (예 : sub.external.com )을 서버 IP (예 : 123.456.678 )로 설정하십시오.

보안으로 인해 티켓 # 6880에 따라 settings.py 에서 ProxyPass를 사용하는 경우 명시 적으로 HTTP_HOST를 전달해야합니다 .

USE_X_FORWARDED_HOST = True

그런 다음 Apache /etc/httpd/httpd.conf에 다음을 추가하십시오 .

# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf

VirtualHost를 /etc/httpd/extra/httpd-vhosts.conf에 추가하십시오 :

NameVirtualHosts *:80

<VirtualHost *:80>
  ServerName sub.external.com
  ProxyPass / http://127.0.0.1:8000/
</VirtualHost>

이제 "경로"에 대해 걱정할 필요없이 http://sub.external.com 에서 사이트에 액세스 할 수 있습니다.


1

귀하의 답변에 감사드립니다.이 문제를 해결 한 후 약간의 수정이 필요하므로 내 질문에 대답하고 있습니다.

먼저, App # 2는 http://192.168.0.101에서 실행됩니다. http://192.168.0.101/path에서 실행되지 않으므로 ProxyPass 가 제대로 작동하지 않습니다.

따라서 irc의 #apache 녀석들과 이야기를 나눈 후 다음과 같은 일을해야한다는 것을 알았습니다.

RewriteCond % {HTTP_HOST} ^ app2.myremotedns.com *

RewriteRule. * http://192.168.0.101/ [P]

이것이하는 일은 app2.myremotedns.com에 대한 요청이 프록시를 통해 내부 IP로 전송되도록 다시 쓰기 규칙을 보내는 것입니다.

이것은 다소 작동하지만 세 가지 문제가 있습니다.

  • 모든 페이지에서 로그인이 필요하면 app2에서 원격으로 액세스하면 / auth / login으로 리디렉션됩니다. 그러나 현재 Rewrite 설정으로 인해 Firefox가 경로 시도를 중단하기 전에 리디렉션 루프가 발생합니다. 나는 이것이 장고의 리디렉션 방법과 관련이 있다고 생각하지만 확실하지 않습니다.

  • 로그인을 비활성화하면 페이지가 작동하지만 완전히 작동하지는 않습니다. App # 2의 색인 페이지를 가져올 수있는 것 같지만 실제로는 아무것도 없습니다.

  • 정적 미디어가 모두 손상되었지만 이것은 아마도 간단한 수정일 것입니다.

그래서 나는 더 복잡한 문제를 겪고 나서 상상했다 ... :)


기본값과 다른 django 구성을 사용하면 많은 문제가 발생합니다. 최근에 내 블로그에서 django와 ProxyPass의 또 다른 문제가 해결되었습니다 : fromzerotocodehero.blogspot.com/2011/01/…

1
이것에 대한 해결책을 찾았습니까? 나는 특히 미디어 스타일 등을 잃는 것과 똑같은 문제가 있습니다.
membersound
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.