2016-09-13 22 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