ProxyPass 사용법을 이해하도록 도와주세요 기능에 익숙 할

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

안녕,

이 글을 읽고 있다면 아마도 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 앱에서 수정해야합니까?

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



답변

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

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

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


답변

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 에서 사이트에 액세스 할 수 있습니다.


답변

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

먼저, 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의 색인 페이지를 가져올 수있는 것 같지만 실제로는 아무것도 없습니다.

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

그래서 나는 더 복잡한 문제를 겪고 나서 상상했다 … 🙂