【发布时间】:2018-07-19 18:56:55
【问题描述】:
我正在尝试在 nodejs 中设置 twilio 客户端快速启动应用程序。我使用 nginx 作为反向代理,以便向http://example.com/calls 发出的请求,nginx 将其路由到 localhost:3000,我运行 twilio nodejs 快速入门。问题是 expressjs 期望像我在没有子目录的情况下调用 http://example.com 一样提供文件。
我知道我可以使用 app.get,但我不确定这个特定应用的配置方式。现在它有:
const http = require('http');
const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
const router = require('./src/router');
// Create Express webapp
const app = express();
app.use(express.static(path.join(__dirname, 'public')));// <-Pretty sure I'm supposed to change something here
app.use(bodyParser.urlencoded({extended: false}));
在 index.js 中,节点运行在
/var/www/example.com/calls/index.js
我认为应该提供的静态内容是在
/var/www/example.com/calls/public/index.html
如何更改此设置以使 express 找到内容?
Nodejs 肯定会收到请求。错误是Cannot GET /calls/ 并且标头X-Powered-By 存在并设置为Express
编辑:
我本来希望按照说明进行操作 here,但我的 at&t 防火墙不允许我进行更改。由于我已经打开了 80 和 443 端口,我决定下一个最佳选择是将应用程序代理到我已经在我的系统上运行的域的子文件夹。到目前为止提供的两种解决方案都允许提供/public 文件夹内的 index.html 文件,但 nginx 无法提供位于同一文件夹中的 js 文件或 css 文件。
app.use('/calls',express.static(path.join(__dirname, '/public')));
目前正在https://example.com/calls 提供 index.html 文件,这很棒。令人讨厌的是 nginx 并没有将 https://example.com/calls/site.css 的请求传递给 nodejs。
如果我添加行
rewrite ^/cawls(.*)$ $1 break;
然后什么都找不到。
这是 nginx 调用。
location ~/calls(.*)$ {
# rewrite ^/calls(.*)$ $1 break;
proxy_pass http://127.0.0.1:3000;
}
【问题讨论】:
-
我认为这可能是您的 nginx 配置而不是 express 的问题。你是如何设置反向代理的?
-
嗨,菲尔纳什。我特别标记了这个 Twilio 标签,希望你能找到它。我很高兴你做到了。我认为 Twilio 是一个相关标签,因为 Twilio 人需要了解快速入门应用程序的内部工作原理和依赖关系。任何我知道依赖项和所需结构的应用程序都会相应地编写。
-
但这与快速入门应用程序的内部工作无关,更多的是关于您正在反向代理到子目录下的 node.js 应用程序。不过,我很乐意提供帮助!
-
谢谢。只是解释我为什么选择它。 :)
标签: node.js express nginx reverse-proxy