하나의 공용 IP 뒤에 여러 웹 서버


2

오랜 독자 처음 포스터 (그는). 여기 딜레마가 있습니다. 나는 친구를 위해 집에서 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의 분리가 우선합니다.

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


1
가동 시간에 대해 신경이 쓰이는 경우 vps를 대여하고 서버를 호스팅하지 않는 이유는 무엇입니까?
tombull89

가상 라우팅에 대해서만 이야기해야한다는 점에서 구체적이어야합니다.

1
질문 : 각 서버가 자체 사이트를 호스팅하고 있습니까? 아니면 각 서버에 세 사이트 모두의 사본이 있습니까? 로드 밸런서가 필요하지만 집에서 하나를 사용하고 싶습니까? 어디서부터 시작해야할지 모르겠습니다.
tombull89

각 사이트마다 자체 사이트가 있습니다. 나는 가상 라우터가 '트릭'을 할 수 있다고 생각합니다. 답과 같이 어디서부터 시작해야할지 잘 모르겠습니다. 분리하는 느낌이 너무 번거 롭습니다.

5
mod_proxy를 사용하여 아파치 서버를 설정하고 각 사이트를 자체 서버로 프록시하십시오. 라우터는 해당 아파치 서버로 포트 포워딩 만하면됩니다.
Jenny D

답변:


3

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


가지고있는 VM 중 하나에서 nginx를 프록시로 설정하고 WebProxy로 사용할 수 있습니다. 다음은 Nginx HTTP 프록시 모듈에 대한 문서입니다 : nginx.org/en/docs/http/ngx_http_proxy_module.html 또 다른 하우투 : cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

1
아마도 이것이 가장 좋은 방법 일 것입니다. 이 아이디어를 적용하는 방법에 대한 몇 가지 지침과 문서 / 하우투 링크를 제공하지 않으면 대답이 아닙니다.
mveroone

2

다양한 솔루션을 시도했지만 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 주소 (기계를 호스팅하는 곳)를 업데이트해야합니다 이러한 다중 사이트).


이 접근 방식을 통해 그는 모든 사이트를 단일 VM에서 호스팅 할 것입니다. 리소스 할당 측면에서 큰 문제는 아니며 실제로 더 좋습니다.
MDMoore313

MDMoore313을 확인했습니다. 이유 : Apache2에는 이미 가상 호스팅 기술이 있으며 단일 시스템에서 다중 사이트를 운영 할 수 있습니다.
파론

1

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

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


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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.