【发布时间】:2015-06-12 00:36:09
【问题描述】:
我正在尝试将自定义中间件路由添加到现有 Loopback 应用程序,但使用我的本地域映射看到奇怪的错误,但在 localhost:3000 上一切正常。
我的设置是使用 nginx 作为代理服务器使用
location /api {
proxy_pass http://localhost:3000;
}
我已从Add a custom Express Route 文档页面添加了示例 server/boot/aroutes.js 文件:
module.exports = function(app) {
// Install a "/ping" route that returns "pong"
app.get('/ping', function(req, res) {
res.send('pong');
});
}
我的服务器/启动看起来像这样,所以 aroutes.js 按字母顺序排在第一位:
server/boot/
aroutes.js
authentication.js
rest-api.js
当被 AngularJS 调用时,我的应用程序和 /api 相同的域代理可以正常工作,但是当通过 https://domain.com/api/ping 调用时,我似乎无法获得自定义 Express 路由来工作,但它可以工作当我使用http://localhost:3000/ping 时很好。
使用http://localhost:3000/ping 我明白了
但是在 nginx ssl 代理上使用完整的模拟域,它不会采用相同的路由:
{
"error": {
"name": "Error",
"status": 404,
"message": "There is no method to handle GET /ping",
"statusCode": 404,
"stack": "Error: There is no method to handle GET /ping
at restUrlNotFound (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/strong-remoting/lib/rest-adapter.js:332:17)
at Layer.handle [as handle_request] (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:302:13)
at /Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:270:7
at Function.proto.process_params (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:321:12)
at next (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:261:10)
at jsonParser (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/body-parser/lib/types/json.js:96:40)
at Layer.handle [as handle_request] (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:302:13)
at /Users/notbrain/src/proteus/node_modules/loopback/node_modules/express/lib/router/index.js:270:7"
}
}
这是预期的行为吗?我怎样才能使两者相等?这里似乎有两个问题
- nginx proxy_pass 干扰环回路由
- 我的自定义路由在 nginx 干扰时没有注册回环
更新 6/24:此处使用了更明确的 nginx 配置:
http {
# ...snip logging etc... #
upstream api {
# loopback api on port 3000
server localhost:3000;
}
upstream app {
# browser-sync frontend for dev on port 3001
server localhost:3001;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name dev.app.proteus.com;
ssl_certificate ssl/dev.app.proteus.com.crt;
ssl_certificate_key ssl/dev.app.proteus.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# ----- PFS ----- #
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
location / {
# proxy_pass to connect server spawned by gulp browserSync ------------
proxy_pass http://app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /api {
proxy_pass http://api;
}
}
}
【问题讨论】:
标签: node.js express nginx loopbackjs