2011-01-03 2 views
3

클라이언트에서 PHP 웹 애플리케이션을 3 층으로 구성해야한다는 요구 사항이 있습니다. 예를 들어 DMZ의 Apache에는 웹 서버가 있지만 DB 연결은 포함되어서는 안됩니다. 비즈니스 오브젝트를 호스트하지만 방화벽 뒤에 있어야하는 중간 서버에 연결해야합니다. 그런 다음 해당 객체는 다른 서버의 SQL 클러스터에 연결됩니다.PHP를 사용하여 3-tier를 수행하는 방법

실제로 .NET을 사용하여이 작업을 수행했지만 PHP를 사용하여 스택을 설치하는 방법을 잘 모르겠습니다. 두 번째 웹 서버로 중간 계층을 만들면 REST 기반 웹 서비스를 사용하여 중간 계층에 내 UI 프런트 계층 호출을 할 수 있다고 생각하지만 지나치게 복잡합니다.

이 주된 이유는 고급 보안입니다. 우리는 DMZ 첫 번째 계층 웹 서버에 암호를 가질 수 없습니다. 두 번째 이유는 확장 성입니다. 요청을 처리 할 수있는 여러 계층의 서버가 여러 개있는 것입니다. 마지막 이유는 배포를위한 것입니다. 프로덕션 환경에두기 전에 한 세트의 서버를 오프라인으로 테스트하여 테스트 할 수 있다면 더 쉽습니다.

이것을 수행하는 방법을 보여주는 오픈 소스 프로젝트가 있습니까? 내가 찾을 수있는 유일한 예는 웹 서버가 다른 컴퓨터의 공유 드라이브 (DotNetNuke가 3 계층 인 것처럼 보이는 방식)에서 파일을 호스팅하는 것이지만 안전하지는 않습니다.

참고 : 나는이 대답을 조사 했으므로 많은 비슷한 질문을하지만 실제로 대답 한 사람을 찾지 못했습니다. 이것은 데이터 액세스 레이어에 관한 것이 아니라 (사용 하겠지만) 가장 중요한 질문은 UI와 중간 계층 간의 디자인입니다.

답변

6

하나의 옵션은 FastCGI을 사용하는 것입니다.

첫 번째 계층에서는 프런트 엔드 서버 (Apache, Lighttpd, NginX 등)를 두 번째 계층의 FastCGI 서버에 연결하기 만하면됩니다.

다른 옵션은 첫 번째 계층에서 두 번째 계층으로 역방향 프록시하는 것입니다. 이것은 FastCGI를 사용하는 경우와 달리 두 번째 티어가 웹 서버를 실행한다는 점을 제외하면 첫 번째 예제와 매우 유사합니다.

하지만 스스로에게 묻고 싶은 질문은 그 이유입니다. 2 티어로 똑같은 것을 달성 할 수 있고 각 티어마다 별도의 네트워크를 가지고 있기 때문에 DMZ 서버는 각 네트워크 당 하나씩 2 개의 네트워크 카드를 갖게됩니다. DB는 여전히 세계와 격리되어 있지만 시스템에서 불필요한 복잡성을 추가하는 것에 대해 걱정할 필요가 없습니다 ... 더 많은 조각을 추가하면 실패 할 수있는 것보다 더 많은 것을 기억하십시오.

+0

그리고 반론. 아름다운. – Chris

+0

이것이 더 복잡한 아키텍처라는 것을 알고 있지만, .NET에서 그것을했을 때 의미가 있습니다. – Ric

+0

웹 서버의 PHP 스크립트가 두 번째 계층의 FastCGI와 어떻게 다릅니 까? 그리고 MiddleTier의 PHP DAL 객체가 FastCGI를 사용하여 DB를 호출하는 방법은 무엇입니까? – Ric

관련 문제