【发布时间】:2017-02-20 09:33:36
【问题描述】:
我在端口 5000 上运行 Koa 应用程序,我希望 Ngnix 在子目录中提供应用程序 - 例如:http://example.com/myNodeApp
这是我目前在 /etc/nginx/sites-enabled/default 中得到的内容
location ^~ /myNodeApp/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:5000/;
}
这种种可以工作...除了我的 Koa 应用程序中的任何重定向(例如 this.redirect('/'))都会转到 nginx 网络根目录 /
此外,它不会从我的 Koa 应用程序的 public 目录中呈现任何内容,例如样式表、javascript 和图像。
我做错了什么?谢谢。
【问题讨论】:
-
你为什么使用正则表达式匹配位置?切换到简单字符串匹配
location /myNodeApp/ { -
感谢@Terra。我读了一个类似的 SO question,他们在哪里这样做,并认为我也会尝试。更改为
location /myNodeApp/ { ... }(没有您建议的正则表达式),得到相同的结果。 -
你能检查并显示完整的
Location标头吗?带域部分。因为Location标头重写仅在您的节点应用程序重定向到localhost:5000 时才起作用。但是如果节点应用程序重定向到localhost - 需要自定义重写。所以,需要知道位置标头的样子。 -
不太清楚你在问什么 Terra(对不起)。我有一个股票 nginx 配置,并将上面的代码固定在
server { ... }块内。这对我来说有点新鲜! -
哦,让我解释一下,你需要找到。阅读此nginx.org/en/docs/http/…,尤其是默认行为。使用 HTTP 标头
Location: http://xxxxx/xxx进行重定向的节点应用程序。取决于域部分 - nginx 可以重写它或不重写它。如果此域部分localhost:5000- nginx 可以将此重定向重写为默认行为。如果节点应用程序使用另一个域部分(例如http://localhost/xxxx) - 您需要添加自定义proxy_redirect指令。
标签: node.js nginx koa proxypass