2016-09-13 64 views
0

我在Linux服務器上運行Apache,發現在使用通過Apache的URL時,我的node.js應用路由無法正常工作。使用Apache代理的Node.js路由

我也跟着上其他職位說明書接通阿帕奇內的代理模塊,然後設置了這樣的定義:

ProxyPass /testauth http://localhost:3000/ 

(我也有在那裏一行來定義什麼也沒做類似的反向代理)

我節點應用在端口3000上運行具有路由在app.js

app.use('/', routes); 
app.use('/tests', tests); 
app.use('/questions', questions); 

建立像如果我訪問的URL我的服務器上是這樣的:

http://rose.cs.umass.edu:3000/ 
http://rose.cs.umass.edu:3000/questions/179 

我得到正確的結果(注意一些簡單的CSS樣式) 如果我嘗試訪問通阿帕奇這樣的:

http://rose.cs.umass.edu/testauth/questions/179

我得到一個404錯誤,但是從回溯看它在我的js代碼中。
出於某種原因,URL http://rose.cs.umass.edu/testauth部分工程(CSS,但不應用(因爲index.ejs文件包括這樣的CSS:

<link rel='stylesheet' href='/stylesheets/style.css' /> 

的CSS文件的位置和相對路徑的編碼如下所有的node.js例子都在我的開發環境中看過並且工作正常,但是當通過Apache運行應用程序時,事情並不正確。 有沒有對apache配置的修復?我必須做一個調整如何在我的javascript和ejs文件中的代碼路徑?

+0

當然'HTTP://本地主機/ 3000 /'應改爲'HTTP ://本地主機:3000 /'?同樣在一個半相關的說明中,如果你真的想要節點前面的東西,你可能會更好用其他軟件而不是Apache,因爲Apache根本不能很好地擴展(或多或少地否定節點的性能)。 – mscdex

+0

正確。我修復了這個帖子。這裏的表現並不是真正的問題。節點應用程序是一個快速和骯髒的一次性 – dam

回答

0

我決定模仿JSP $ {pageContext的想法}

我添加到文件名爲config.js有,尤其適用於在應用程序正在運行(這樣的東西分貝憑證等)的各種設置。我加

// uncomment the line that applies 
config.pageContext = "" // dev environment 
// config.pageContext = "testauth" // production environment 

我的路由腳本都做這樣的事情:

res.render('questions', {pageContext: util.pageContext(req), questions: questionArray}); 

而且EJS模板都有這樣的東西在網址:

<script src="<%= pageContext %>/static/js/bootstrap.min.js"></script> 

,我使用的第二個選擇一段時間,直到我與上述:

當你開始傳遞一個參數到你的節點應用程序它。然後設置一個類似於上面的全局變量,並以類似的方式使用它。如果您使用進程管理器(我用PM2)在服務器上運行的應用程序的節點可能必須做一些事情,如:

pm2 start testauth -- -c /testauth // start testauth.bin using /testauth for the page context 
1

一個線索我不得不出錯的是,該節點打印路徑ea CH時間的請求進來,他們看起來像

GET //questions/ 404 4.278 ms - 916 

因此,我改變阿帕奇有:

ProxyPass /testauth http://localhost:3000 (removed trailing slash) 

現在進入我的應用程序的路徑被正確地形成。

業務的下一個訂單是重新制作我的EJS模板中的所有相對URL,客戶端JavaScript,甚至重定向到服務器端。

因爲我必須在路徑中放入「testauth」以便Apache可以轉發到節點,所有進入應用程序的URL都是rose.cs.umass.edu/testauth/rest-of-url格式。這意味着我的應用程序代碼中的相對URL看起來像

<a href="/questions" ....> 

是現在不正確,因爲他們創造了省略testauth路徑中的絕對URL。現在,這些相對URL中的一些非常奇怪(使用諸如../的東西或者甚至是../ ..來獲得東西)。我希望有一個類似於$ {pageContext.request.contextPath}的變量,我在JSP中使用它來構建URL。

+0

我面臨着同樣的問題。你有沒有辦法做到這一點? – smaira