Apache를 Node.js로 바꿀 수 있습니까?


151

일반적인 용의자 (Apache, MySQL 및 PHP)를 사용하여 CentOS에서 실행되는 웹 사이트가 있습니다. 이 웹 사이트가 처음 시작된 이후로 웹 사이트는 상당히 발전했으며 이제는 실시간 알림과 같이 더 멋진 일을하고 싶습니다. 내가 읽은 내용에서 Apache는 이것을 잘못 처리합니다. Apache 만 Node.js로 대체 할 수 있는지 궁금합니다 ( " LAMP " 대신 "LNMP").

솔루션을 온라인으로 검색하려고 시도했지만 찾지 못했습니다. 내가 읽은 내용을 올바르게 해석하면 대부분의 사람들은 Node.js가 Apache와 PHP를 함께 바꿀 수 있다고 말합니다. 그래도 기존 PHP 코드가 많이 있으므로 유지하는 것이 좋습니다.

그것이 분명하지 않은 경우, 나는 꽤 혼란스럽고 약간의 깨달음을 사용할 수 있습니다. 매우 감사합니다!


원숭이 서버는 살펴볼 가치가 있습니다.
TryHarder

답변:


86

JavaScript로 PHP를 다시 작성할 준비가 되었다면 Node.js가 Apache를 대체 할 수 있습니다.

서버와 클라이언트간에 리버스 프록시 모드로 실행되는 Apache 또는 NGINX 인스턴스를 배치하면 모든 PHP를 완전히 대체 할 때까지 Node.js의 JavaScript 및 Apache 호스팅 PHP의 일부 요청을 처리 할 수 ​​있습니다. JavaScript 코드로. 이것은 행복한 매체 일 수 있습니다 : WebSockets는 Node.js에서 작동하고 Apache + PHP에서는 더 평범한 작업을 수행하십시오.


1
빠른 답변 감사합니다! nginx가 Apache보다 훨씬 우수합니까? 나는 이미 .htaccess 파일을 가지고 있으며 그것을 유지하는 것이 좋을 것입니다. 또한 Apache를 Node.js에 전달하는 것이 의미가 없다는 것을 읽었습니다 .Apache를 계속 진행하고 있기 때문에 Node.js의 장점을 잃어 버리기 때문입니다. Node.js가 포트 80에서 "nodejs"라는 하위 폴더에있는 내용을 수신하고 해당 하위 폴더에없는 것이 Node.js에 의해 Apache로 전달되도록하는 것이 더 좋습니까? 아파치는 8000과 같은 다른 포트에서들을 수 있습니다.
Rick

21
@Rick, 나는 내 자신의 답변을 삭제하는 것에 가깝습니다. 노드를 사용할 수 있습니다sendfile , 그리고이 된 FastCGI에 대한 모듈을 쉽게 노드를 통해 PHP를 제공뿐만 아니라 수 있도록 수있는 지원. nginx 대 Apache의 경우 항상 스레드 또는 다중 프로세스 서버를 통한 비동기 스타일 서버의 빨판이었습니다.)하지만 Apache 문서를 쉽게 읽고 읽을 수 있다는 것을 알았습니다. 나는 당신이 놀라운 숫자로 확장 할 필요가 없다면 개인적 선호를 부를 것입니다. :)
sarnold

3
@Rick 프로덕션 내용과 작동 방식을 이해하기 전에 프로덕션 항목을 Node로 마이그레이션하고 싶지 않습니다. 노드는 물건을 더 빨리 만드는 마법의 약이 아닙니다. 이벤트 주도 / 비동기 패러다임은 새로운 것이 아니며 모든 것에 사용되지 않는 이유가 있습니다. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar

1
@Rick 가지고있는 것을 대체해야한다고 생각하는 대신 Node를 실행하는 것이 좋습니다. 노드 (?)를 통해 모든 것을 전달할 이유가 있다고 생각하지 마십시오. 나쁜 생각처럼 들립니다. 다른 포트 나 호스트에서 노드를 실행하십시오.
Øyvind Skaar

2
@ Øyvind Skaar 동의합니다. 또한 대부분의 웹 사이트 (예 : Wordpress)에서 실제 병목 현상은 파일 액세스가 아니라 데이터베이스입니다. 그리고 파일 액세스에 문제가 있으면 캐시는 항상 실행 가능한 솔루션입니다. 어쨌든 실제 성능을 위해 PHP-APC는 싸구려 속임수입니다.
magallanes

26

Node.js는 이벤트 / 차단되지 않는 아키텍처 덕분에 Apache보다 빠를 수 있지만 일부 Apache 기능을 대체하는 모듈 / 라이브러리를 찾는 데 문제가있을 수 있습니다.

Node.js 자체는 경량의 저수준 프레임 워크로, 웹 애플리케이션의 서버 측 컨텐츠 및 실시간 부분을 비교적 빠르게 빌드 할 수 있지만 Apache는 훨씬 광범위한 구성 옵션 및 "클래식"웹 서버 지향 기능을 제공합니다.

PHP를 express.js와 같은 node.js 기반 웹 응용 프로그램 프레임 워크로 바꾸지 않으려면 Apache를 유지해야합니다 (또는 성능 문제가있는 경우 Nginx로 마이그레이션하는 것을 고려하십시오).


11

Node.js는 웹 서비스의 미래라고 생각하지만 기존 PHP 코드가 많은 경우 Apache / MySQL이 가장 좋습니다. Apache는 요청을 Node.js로 프록시하도록 구성하거나 Node.js는 요청을 Apache로 프록시하도록 구성 할 수 있지만 두 경우 모두, 특히 첫 번째 경우에는 일부 성능이 손실된다고 생각합니다. 트래픽이 많은 웹 사이트를 운영하지 않는다면 큰 문제는 아닙니다.

방금 stackoverflow에 등록했지만 허용되는 답변에 대해서는 아직 언급 할 수 없지만 오늘날 sendfile ()을 사용하여 HTTP 프로토콜을 통해 파일을 제공하는 간단한 Node.js 스크립트를 만들었습니다. (허용 된 답변이 링크되는 기존 예제는 베어 TCP 프로토콜 만 사용하여 파일을 보내므로 HTTP에 대한 예제를 찾을 수 없으므로 직접 작성했습니다.)

그래서 누군가 이것이 유용하다고 생각했습니다. sendfile () OS 호출을 통해 파일을 제공하는 것이 "사용자 랜드"를 통해 데이터를 복사 할 때보 다 반드시 빠를 필요는 없지만 CPU 및 RAM을 덜 사용하게되므로 기존 방식보다 더 많은 수의 연결을 처리 할 수 ​​있습니다.

링크 : https://gist.github.com/1350901


2
매우 사실이지만, 아파치를 벗겨 낸 경우 설명하는대로 수행하면 안됩니다. 그렇지 않으면 node.js보다 빠릅니다. Apache는 사람들이 보지 못하거나 실제로 이해하지 못하는 많은 일을 수행하며 이러한 웹 서버의 모든 기능을 node.js에 추가하면 느리게 실행될 것입니다. 간단한 예로 아마 mynode.js / getfile? file = / etc / shadow
Rahly

8

내가 말한 것을 정확하게 설명하는 이전 SO 게시물 (php + socket.io + node)

socket.io를 사용하여 somehost : 8000에 노드 서버를 넣고 socket.io 클라이언트 코드를 태그에 넣을 수 있으며 최소한의 작업으로 기존 작업을 많은 작업없이 socket.io (실시간 베이비)로 흔들 수 있습니다.

노드가 유일한 백엔드 서버가 될 수 있지만 노드는 이름에 따라 노드가되는 것을 좋아합니다. Ryan Dahl이 PHP Users 그룹에 제공 한 대화를 잠시 확인한 후 작업을 수행하고 서로 대화하는 여러 노드 프로세스의 비전과 관련된 이름 노드를 언급했습니다.


2

요즘에는 램프 대 평균입니다. 직접 비교하려면 http://tamas.io/what-is-the-mean-stack을 참조하십시오 .

물론 M, E 및 A는 다소 가변적입니다. 예를 들어 최신 코아 가 (E) xpress를 대체 할 수 있습니다.

그러나 Apache를 Node.js로 바꾸는 것이 웹 스택을 현대화하는 올바른 방법이 아닐 수도 있습니다.

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