使用 Apache2 反向代理部署 Yeoman 全栈应用程序?

Deploy Yeoman full-stack app with Apache2 Reverse Proxy?

我有一个 Yeoman 全栈应用程序 @2.0.13,其目录结构与 this tutorial.

中的目录结构完全相同

一切正常 - grunt serve:dist 等工作没有任何错误。现在我想投入生产并使用 mod_proxy 在 apache 服务器上部署应用程序 example.com/xxx。我将 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.jsapp.js 等等)不是。无论我尝试了什么,无论我测试过任何指南的设置如何,我都会得到 404

真的花了很多时间在这上面。在我看来,反向代理似乎以某种方式改变了内部网址?如果我将 dist/ 替换为仅侦听端口 9000 和 returns hello world 的节点脚本,则该设置有效。

我错过了什么?还有其他方法吗?

所以我也到处找了一段时间,但终于找到了这个 link:
Apache and Yeoman built NodeJS app on the Same Server... Virtual Hosts?
这让我走上了正确的轨道,所以我认为应该解决的问题是将 index.hml 文件的 header 部分中的基本标记更改为:

    <base href="/xxx/">

而且它们应该是可以访问的,至少对我来说是这样。
我的虚拟主机设置如下所示:

    <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/

对于遇到此问题的其他人,我最终使用了端口 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