我創建了一個小代理節點腳本,它查找request.url 並將請求傳遞給我的apache服務器或使用節點 進程/響應此請求。我已經成功到目前爲止, 一切工作正常,但是當我啓用mod_deflate爲Apache, 「奇怪的事情會發生」。Nodejs代理腳本,與mod_deflate無關
它看起來像節點只是「取消」或「停止」早期的響應方式。 我正在監聽來自我請求的「數據」事件,並且在某個點 節點剛剛決定響應已結束(這是錯誤的),並且 觸發了「結束」事件。
代碼片段:
var apache = http.createClient(82, 'localhost');
function pass_to_apache(req, res){
var request = apache.request(req.method, req.url, req.headers);
req.addListener('end', function() {
request.end();
});
req.addListener('data', function(chunk) {
request.write(chunk);
sys.puts('writting chunk\n');
});
request.addListener('response', function(response) {
res.writeHead(response.statusCode, response.headers);
response.addListener('data', function(chunk) {
sys.puts('writting data..\n');
res.write(chunk);
});
response.addListener('end', function() {
sys.puts('end of request');
res.end();
});
});
}
var MainServer = http.createServer(function(request, response) {
sys.puts('received '+request.method+' '+request.url + "\n"+JSON.stringify(request.headers));
if(/^\/node/.test(request.url)) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end("Hi, it's node =)\n");
}
else if(/^\/exit/.test(request.url)) {
sys.puts('closing..\n');
MainServer.close();
throw new Error('forced');
}
else {
pass_to_apache(request, response);
}
});
MainServer.listen(80, 'typeofnan.com');
可以通過 「看」 這個動作在www.typeofnan.com & & www.typeofnan.com/node/anything
編輯:禁用對的NodeJS現在。
請記住,如果沒有gzip/deflate被apache使用,這就像一個魅力。我嘗試在我的響應中將編碼設置爲「二進制」,但也沒有成功。
我在這裏錯過了什麼嗎?阿莫尼能證實這種行爲嗎? 我正在使用最新版本(0.2.0)。
是否有另一種(更好的)解決方案使用這樣的代理腳本?
當我在我的服務器上禁用'mod_deflate',它工作正常與代理腳本。在其他方式(禁用mod_deflate或使用accept-headers),這不是我想要的。我想要從apache執行gzip,並且我希望節點能夠通過它(這仍然不起作用)。目前,我禁用了nodejs,它是100%的apache。我在帖子中已經描述過「奇怪的事情」。節點只是停止發送數據,或早或晚。在中間傳輸一個JS/CSS/HTML /無論文件,只是停止。 – jAndy 2010-09-13 12:32:56
Gotcha。只是爲了澄清我的意思是你可以讓節點做gzip並讓apache在沒有它的情況下做出迴應。 – bxjx 2010-09-13 13:32:08
因此,加載特定文件時會崩潰嗎? http://www.typeofnan.com/cgi-bin/supply.pl?js=[%22jquery-1.4.2.min.js%22,%22jquery-ui-1.8.4.custom.min的響應。 js%22,%22init.min.js%22,%22box.min.js%22,%22app.min.js%22]似乎不太正確。看起來不像cgi配置正確。也許刪除supply.files(..)調用,看看節點是否更喜歡事物。 – bxjx 2010-09-13 13:38:11