簡體   English   中英

在 apache 中運行 Node.js?

[英]Running Node.js in apache?

我們在一台機器上安裝了一個 Apache Webserver,它也使用 Perl 提供頁面。

對於一個項目,我決定使用 Node.js 而不是 Perl/Ruby。 只是想知道是否可以使用 Apache 作為我的網絡服務器(因此它為頁面提供服務)並使用 Node.js 動態創建網頁(這是我正在創建的網絡應用程序)?

因此,換句話說,它們可以像 Apache/Perl 或 Apache/PHP 等一樣攜手合作。

可以使用 apache 代理模塊組織通過 apache 托管 nodejs 站點。

最好在本地主機上使用默認端口 1337 啟動 nodejs 服務器

使用命令啟用代理:

sudo a2enmod proxy proxy_http

在您保護服務器之前,不要使用 ProxyRequests 啟用代理。 開放代理服務器對您的網絡和整個 Internet 都是危險的。 將 ProxyRequests 設置為 Off 不會禁用 ProxyPass 指令的使用。

配置 /etc/apche2/sites-availables

<VirtualHost *:80>
    ServerAdmin admin@site.com
    ServerName site.com
    ServerAlias www.site.com 

    ProxyRequests off

    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location />
        ProxyPass http://localhost:1337/
        ProxyPassReverse http://localhost:1337/
    </Location>
</VirtualHost>

並重新啟動 apache2 服務。

不可以。NodeJS 不能像 mod-perl 和 mod-php 那樣作為 Apache 模塊使用,因此不可能在 Apache 的“之上”運行節點。 正如 hexist 指出的那樣,可以將 node 作為單獨的進程運行並安排兩者之間的通信,但這與您已經使用的 LAMP 堆棧完全不同。

作為 Apache 的替代品,如果您有許多同時連接,node 會提供性能優勢。 還有一個龐大的模塊生態系統,幾乎可以滿足您的任何想法。

從您的問題來看,不清楚您是否需要針對每個請求動態生成頁面,或者只是定期生成新內容以進行緩存和服務。 如果是后者,您可以使用單獨的節點任務將內容生成到 Apache 將服務的目錄中,但同樣,這與 PHP 或 Perl 完全不同。

Node 不是提供靜態內容的最佳方式。 Nginx 和 Varnish 在這方面更有效。 它們可以提供靜態內容,而 Node 處理動態數據。

如果您完全考慮將 node 用於 Web 應用程序,Express 應該在您的列表中名列前茅。 您可以完全在 Node 中實現 Web 應用程序,但 Express(以及類似的框架,如 Flatiron、Derby 和 Meteor)旨在消除很多痛苦和乏味。 盡管 Express 文檔一開始看起來有點稀疏,但請查看此處仍然可用的屏幕轉換: http : //expressjs.com/2x/screencasts.html他們會讓您對 express 提供的內容以及原因有很好的了解它是有益的。 ExpressJS 的 github 存儲庫還包含許多很好的示例,從身份驗證到組織您的應用程序。

雖然這里有很多很好的提示,但我想回答您提出的問題:

因此,換句話說,它們可以像 Apache/Perl 或 Apache/PHP 等一樣攜手合作。

是的,你可以,如果你運行它作為一個CGI模塊上沿側Perl和PHP運行Apache Node.js的。 到目前為止,我無法找到 Apache 的 mod-node,但請查看:CGI-Node for Apache http://www.cgi-node.org/

cgi-node的有趣之處在於它使用 JavaScript 就像您使用 PHP 生成動態內容、服務靜態頁面、訪問 SQL 數據庫等一樣。您甚至可以在服務器和客戶端/瀏覽器之間共享核心 JavaScript 庫。

我認為客戶端和服務器之間正在轉向單一語言,JavaScript 似乎是一個很好的候選者。

來自 cgi-node.org 站點的一個快速示例:

<? include('myJavaScriptFile.js'); ?>
<html>
   <body>
      <? var helloWorld = 'Hello World!'; ?>
      <b><?= helloWorld ?><br/>
      <? for( var index = 0; index < 10; index++) write(index + ' '); ?>
   </body>
</html>

這輸出:

Hello World!
0 1 2 3 4 5 6 7 8 9

您還可以完全訪問 HTTP 請求。 這包括表單、上傳的文件、標題等。

我目前正在通過 Godaddy 上的 cgi-node 模塊運行 Node.js。

CGI-Node.org 站點包含所有入門文檔。

我知道我對此贊不絕口,但使用 PHP 以外的東西終於讓我松了口氣。 此外,為了能夠在客戶端和服務器上編寫 JavaScript。

希望這可以幫助。

做你想做的事情的常用方法是並排運行它們,或者根據域/url代理從 apache 到 node.js 的請求,或者簡單地從節點中提取你的 node.js 內容。 js端口。 后面的方法非常適合在您的網站上使用 socket.io 驅動的小部件之類的東西。


但是,如果您打算在 node 中生成所有動態內容,那么您也可以使用 node.js 作為您的主要網絡服務器,它在處理靜態和動態 http 請求方面做得非常好。

看:

http://expressjs.com/

https://github.com/joyent/node/wiki/modules

你總是可以做一些 shell-scripty 的事情,比如:

#!/usr/bin/node

var header = "Content-type: text/plain\n";
var hi = "Hello World from nodetest!";
console.log(header);
console.log(hi);

exit;

在做我自己的服務器端 JS 實驗時,我最終使用了teajs 它符合common.js ,基於 V8 並且是我所知道的唯一提供 'mod_teajs' apache 服務器模塊的項目。

在我看來,Node.js 服務器還沒有做好生產准備並且缺乏太多功能——Apache 已經過實戰測試,並且是執行 SSJS 的正確方法。

如果您使用 PHP,您可以通過 shell_exec 將您的請求傳遞給 Node 腳本,在命令行中將參數作為 JSON 字符串傳遞給腳本。 示例調用:

<?php
    shell_exec("node nodeScript.js"); // without arguments
    shell_exec("node nodeScript.js '{[your JSON here]}'"); //with arguments
?>

需要注意的是,當用戶數據進入命令行附近時,您需要非常小心處理用戶數據。 噩夢示例:

<?php
    $evilUserData = "'; [malicious commands here];";
    shell_exec("node nodeScript.js '{$evilUserData}'");
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM