하나의 공용 IP 뒤에 여러 웹 서버 나는 모두 동시에 내려

오랜 독자 처음 포스터 (그는). 여기 딜레마가 있습니다. 나는 친구를 위해 집에서 3 개의 사이트를 호스팅하고 있습니다. VMWare Workstation에서 실행 여분의 숫양과 엉망이되어 자원 전선에 대해 걱정할 필요가 없습니다. 2 번 사이트를 구축 할 때 ‘CRAP! … 라우터를 전달하는 방법은 무엇입니까?’라는 사실을 알게되었습니다. 이제 일부 호스트가 호스트를 말하기 전에 다른 VM에서 사이트를 분리하고 있습니다. 3 분의 1은 매우 중요한 사이트는 아니지만, 무언가가 발생했을 때, 나는 모두 동시에 내려 가지는 않을 것입니다.

일반 Linksys 라우터가 있습니다 (매우 새로운 Smart Wifi 포함). 펌웨어를 좋은 것으로 바꾸어야하는데, 그것은 또 다른 날입니다. 따라서 하나의 공개 IP, 3 개의 VM은 모두 고유 한 내부 IP (192..1 / 2 / 3)를 갖습니다. 라우터는 동일한 포트 (80)를 사용하여 여러 IP로 포트를 전달할 수 없습니다.

할 일이 많으면 총알을 물고 같은 VM으로 옮기고 다른 사이트를 호스팅 할 것이지만 다른 생각은 다른 VM을 사용하는 것이 었습니다. 가상 라우터. pfSense, m0n0wall과 같은 라우터 / 방화벽 VM을 생각할 수 있지만 간단하고 쉽게 갈 수있는 것을 찾고 있지만 포트 80을 가져 와서 호스트처럼 약간 행동해야한다고 가정합니다. 라우터에서 요청한 다음 호스트 헤더를 사용하여 웹 서버를 보유하는 3 개의 VM에 트래픽을 분산시킵니다 (제 생각에).

누구든지 제안, 더 나은 방법 등이 있습니까? 사전에 많은 감사를 받았으며 모든 VM 지붕 아래에 모두 배치하면이 문제를 즉시 해결할 수 있습니다. 제 경우에는 VM의 분리가 우선합니다.

그러나 생각에 매우 개방적입니다. 건배.



답변

도메인 이름을 사용하여 트래픽을 적절한 VM으로 전달하는 프록시로 하나 이상의 vm을 설정하십시오.


답변

다양한 솔루션을 시도했지만 Apache2를 사용하여 성공했습니다. 가상 호스팅 기능이 제공됩니다.

Apache2를 약간 “배선”해야하지만, conf를 가이드로 포함시키고 있습니다. 작동 방식 : apache2는 “이름 기반 도메인”기능에서 작동하며, 원하는 수의 사이트를 하나의 공용 IP에서 실행합니다. [저는 왜이 많은 사이트를 설명하는 개발자입니다].

   $ sudo apt-get install -y apache2 apache2-dev apache2-threaded-dev

conf 끝에이 세 줄을 추가하여 apache2.conf 연결

   include httpd.conf
   <VirtualHost *>
   </VirtualHost>

이 안내서를 사용하여 httpd.conf를 구성하십시오. 귀하의 경우에 따라 조정하십시오. 새 설치로서 기본적으로 httpd.conf는 보이지 않지만 / etc / apache2 디렉토리에 httpd.conf가있는 경우 Apache2가 응답합니다.

    $ sudo touch /etc/apache2/httpd.conf

httpd.conf에 추가하십시오. 큰 강조는 : 80을 그대로 두는 것 입니다. 당신이 볼 때 ‘##이 항목을 편집하십시오 * ‘; 그것은 당신이 다른 사람을 건드리지 않고 자신이 원하는대로 편집 할 수있는 곳입니다.

   <Directory "/var/www">  ***## EDIT THIS***
      Options Indexes FollowSymLinks
      AllowOverride All
   </Directory>

    <location /cgi-bin>
    AddHandler cgi-script .cgi .pl
    Options -Indexes +FollowSymlinks +ExecCGI
    </location>


  <VirtualHost *:80>
    ServerName example.ca  ***## EDIT THIS***
    ServerAlias www.example.ca ***## EDIT THIS***
    DocumentRoot /var/www/example_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

  <VirtualHost *:80>
    ServerName sample.ca ***## EDIT THIS***
    ServerAlias www.sample.ca ***## EDIT THIS***
    DocumentRoot /var/www/sample_ca/html ***## EDIT THIS***
    <Location "/">
            Order Deny,Allow
            Deny from all
            Allow from all
    </Location>
      CustomLog /path/to/your/preferred/log-folder/access.log common ***## EDIT THIS***
      ErrorLog /path/to/your/preferred/log-folder/error.log ***## EDIT THIS***
   </VirtualHost>

그때…

   $ sudo service apache2 restart

그리고 짜잔! 행운을 빕니다!

편집 : 명심하십시오-사이트를 설정하고 로컬 네트워크에서 작동하도록 테스트 한 후 DNS 서비스 공급자 (이 도메인을 등록한 곳)로 DNS를 업데이트하고 IP 주소 (기계를 호스팅하는 곳)를 업데이트해야합니다 이러한 다중 사이트).


답변

라우터는 동일한 포트 (80)를 사용하여 여러 IP로 포트를 전달할 수 없습니다.

그런데 표준 TCP / IP에서는 불가능합니다. 포트에서 요청을 수락하고 요청을보고 그에 따라 요청을 분류하는 프로그램 (예 : 프록시)이 필요합니다.


Apache와 다른 웹 서버에는 들어오는 트래픽을 “분할”하는 데 사용할 수있는 “역 프록시”기능이 있습니다. 리버스 프록시는 Apache에게 특정 웹 경로에 대한 요청 (예 : “yourdomain / directory1”)을 다른 웹 서버로 보내야하고 해당 웹 서버의 응답을 원래 클라이언트로 되돌려 보내야한다고 알립니다.

그러나이 웹 서버 (PHP 등)에서 실행중인 응용 프로그램이있는 경우 외부 URL이 다르므로 설정을 변경해야 할 수도 있습니다. 링크를 올바르게 생성 할 수 있도록 PHP 응용 프로그램에 “yourdomain”대신 “yourdomain / directory1″에 있음을 알려 주어야합니다. 백엔드 서버에서 트래픽을 클라이언트로 다시 보내기 전에 Apache에게 트래픽을 다시 쓰도록 할 수는 있지만 가능하지 않은 경우이를 피하기를 원합니다. Javascript로 링크를 생성하는 응용 프로그램은 특히 문제가 될 수 있으므로 모든 웹 응용 프로그램이 쉽게 “역 프록시 가능”하는 것은 아닙니다.

따라서 네 번째 “프론트 엔드”VM에 Apache를 설치하십시오. 들어오는 TCP 80을이 VM으로 전달하십시오. 또한이 가상 머신이 “가상 네트워크”의 다른 가상 머신에 도달 할 수 있는지 확인해야합니다. 그런 다음 “프런트 엔드”VM에서 각 웹 사이트에 대해 별도의 리버스 프록시를 설정할 수 있습니다.

여기 사용 관련 아파치 구성 세부 사항입니다 ProxyPassProxyPassReverse지시를.

또한 캐싱을 정교하게 구현하여 성능을 향상시킬 수 있습니다.


답변