使用 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.js
,app.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
我有一个 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.js
,app.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