【问题标题】:Deploy Yeoman full-stack app with Apache2 Reverse Proxy?使用 Apache2 反向代理部署 Yeoman 全栈应用程序?
【发布时间】:2016-03-09 12:07:55
【问题描述】:

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

一切正常 - grunt serve:dist 等工作没有任何错误。现在我想投入生产,并使用mod_proxy 将应用程序部署为example.com/xxx 在apache 服务器上。我将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

在这方面确实花了很多时间。对我来说,反向代理似乎以某种方式改变了内部网址?如果我用仅侦听端口 9000 并返回 hello world 的节点脚本替换 dist/,则设置有效。

我错过了什么?有没有其他方法可以做到这一点?

【问题讨论】:

    标签: angularjs apache gruntjs yeoman angular-fullstack


    【解决方案1】:

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

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

    【讨论】:

    • 这个想法+1;虽然已经玩过了。正如 OP 在您所指的问题中得出的结论,然后他以损坏的服务器脚本结束,这也是我的经验,我相信答案是在编辑 Gruntfile.js 所以 grunt 本身在构建阶段使路径正确,但没有有时间去试验一下。如果我找到了解决方案,我会发布它。
    • 好的,我现在可以使用已编辑答案中的设置为我工作,所以如果您在本地安装 pm2 并在本地机器上的 localhost/9000 上运行您的应用程序,如果它仍然存在,会发生什么情况然后不起作用,您可以消除apache代理设置,如果它确实起作用,那么我认为grunt没有搞砸......
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2022-11-12
      • 1970-01-01
      • 2019-07-04
      • 2010-11-07
      • 2014-12-08
      • 2018-12-14
      • 2014-11-21
      • 2018-04-21
      相关资源
      最近更新 更多