我有一个Yeoman全栈应用程序@ 2.0.13,其目录结构与this tutorial完全相同。
一切正常 - grunt serve:dist
等工作没有任何错误。现在,我想继续使用example.com/xxx
将应用程序部署到apache服务器mod_proxy
上。我将grunt build
生成的/dist
目录复制到主目录并启动服务器应用程序:
NODE_ENV=production node server/app.js
应用程序启动,填充用户等等。一切都很好。现在我为节点应用程序设置虚拟主机设置:
<Location /html/xxx/>
ProxyPass http://127.0.0.1:9000/
ProxyPassReverse http://127.0.0.1:9000/
</Location>
这种作品。奇怪的是,dist目录中的index.html
加载正确
dist
├── public
│ ├── app
│ ├── assets
│ ├── bower_components
│ └─ index.html <---
|
└── server
├── api
├── auth
├── components
├── config
├── views
├─ app.js
└─ router.js
proxyPass
有效,index.html
已加载 - 但文件index.html
指的是(4个汇编的public/app
个文件/ vendor.js
,{{1等等)不是。无论我尝试过什么,我都会得到一个app.js
,无论我测试的任何指南是什么设置
真的花了很多时间。对我来说似乎反向代理以某种方式改变了内部网址?如果我用一个只侦听端口9000并返回hello world的节点脚本替换404
,则设置有效。
我错过了什么?还有另一种方法吗?
答案 0 :(得分:1)
所以我在这个地方看了很长时间,但终于找到了这个链接:
Apache and Yeoman built NodeJS app on the Same Server... Virtual Hosts?
这让我走上正轨,所以我认为应该解决的问题是将index.hml文件的header部分中的基本标记更改为:
<base href="/xxx/">
他们应该是可以访问的,至少对我而言。
我的vhost设置如下所示:
<Proxy /xxx/*>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /xxx http://127.0.0.1:6969/
ProxyPassReverse /xxx http://127.0.0.1:6969/
答案 1 :(得分:0)
对于遇到此问题的其他人,我最终使用了端口80
。这有效。在节点环境中,您无论如何都不需要或使用/www
或apache / nginx。所以摆脱这个并使用
// Server port
port: process.env.OPENSHIFT_NODEJS_PORT ||
process.env.PORT ||
80,
在yeoman production.js
文件中。而已。可以在用户home/
目录中提供整个应用程序,而无需安装任何类型的服务器http软件。只需将dist
上传到服务器上的任意位置,然后使用forever即可运行:
sudo NODE_ENV=production forever start server/app.js