节点JS - Nginx - proxy_pass到子目录 - Koa

时间:2016-10-11 18:22:25

标签: node.js nginx koa proxypass

我在端口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和图像。

我做错了什么?感谢。

1 个答案:

答案 0 :(得分:7)

我最近遇到了同样的问题,这就是我所做的修复它。

在服务器配置中:

我必须添加

rewrite ^/myNodeApp/(.*)$ /$1 break;

到NGINX配置,

location /myNodeApp/ {...}

阻止,根据您的示例中已有的内容。

在客户端:

我添加了

<base href='/myNodeApp/'>

到&lt; head&gt;我的html文件(或我的情况下的哈巴狗布局文件)。这会为您子目录的所有链接添加前缀。

请注意,您需要从现有链接中删除任何潜在客户。例如

<link rel="stylesheet" href="layout.css">

而不是

<link rel="stylesheet" href="/layout.css">

那个人抓了我一会儿。

<强>加成:

如果您正在使用Socket.IO,就像我一样,您需要进行一些更改以阻止控制台中出现的一些错误。您需要传递一个路径选项并指定您的子目录。

在你的html文件中

var socket = io.connect("/", {path: "/myNodeApp/socket.io"})