我在nginx後面使用node.js。node.js應用程序使用http-proxy。
基本上,請求到達nginx的,然後被代理到節點應用程式:NGINX + node.js與http-proxy =>標頭中添加的長度
- if static files are requested, the node.js app serves them
- if non static files are requested, the node.js app proxyies the request to a second node.js app (using http-proxy npm).
第二種情況完美地工作時nginx的是不是在圖片。當添加nginx的是,反應是很奇怪:它與奇怪的東西包圍着:的
"4c\r\n{ json stuff }\r\n0"
代替
{ json stuff }
總結:
(不nginx的):爲請求動態內容 - > node.js - >代理到另一個node.js app - >發回給用戶的回覆是正確的:{json stuff}
(with nginx):請求動態內容 - > node.js - >代理到另一個node.js app - >發回給用戶的響應不正確:「4c \ r \ n {json stuff} \ r \ n0「
我還是不明白這裏發生了什麼......任何想法?
UPDATE
嗯....好像它連接到nginx的添加額外的報頭的請求......
我的nginx的conf是:
upstream my_sock {
server unix:/tmp/test.sock
fail_timeout=0;
}
server {
listen 8099;
client_max_body_size 4G;
server_name localhost;
keepalive_timeout 5;
location/{
proxy_pass http://my_sock;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
任何想法如何刪除這些額外的頭文件?
UPDATE 2
加入4c中似乎是我期望(JSON的東西)的響應的長度。然後我說:
proxy_set_header Content-Length '';
在nginx的的conf但什麼都沒有改變......我仍然有顯示... Arg組成的4C ...
與你的問題沒有特別的關係,但是如果第一個節點實例只提供靜態文件,爲什麼不使用NginX來做到這一點,然後對第二個節點實例使用nginx代理呢? NginX在提供靜態文件方面非常出色。 – loganfsmyth
你是對的,這也是我正在考慮的一個很好的選擇,實際上我已經嘗試過並且面臨同樣的問題(內容長度增加了)。一旦我解決了這個問題,我可能會回到你正在談論的解決方案。 – Luc
是否可以在nginx conf中添加一些邏輯,以便它可以根據查詢字符串的格式來代理請求? – Luc