[英]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 請求方面做得非常好。
看:
你總是可以做一些 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;
如果您使用 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.