Node JS - Nginx - proxy_pass 到一个子目录 - Koa
Node JS - Nginx - proxy_pass to a subdirectory - Koa
我是 运行 端口 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 和图像。
我做错了什么?谢谢。
我最近遇到了同样的问题,下面是我解决它的方法。
在服务器配置中:
我必须添加
rewrite ^/myNodeApp/(.*)$ / break;
到 NGINX 配置,在
location /myNodeApp/ {...}
块,在您的示例中已有的内容下。
在客户端:
我加了
<base href='/myNodeApp/'>
到我的 html 文件的
(在我的例子中是 pug 布局文件)。这会为您的子目录添加任何链接前缀。
请注意,您需要从现有链接中删除所有前导的 /。例如
<link rel="stylesheet" href="layout.css">
而不是
<link rel="stylesheet" href="/layout.css">
那个让我迷惑了一会儿。
奖金:
如果您正在使用 Socket.IO,就像我一样,您将需要进行更多更改以阻止某些错误出现在您的控制台中。您需要向它传递一个路径选项并指定您的子目录。
在您的 html 个文件中
var socket = io.connect("/", {path: "/myNodeApp/socket.io"})
我是 运行 端口 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 和图像。
我做错了什么?谢谢。
我最近遇到了同样的问题,下面是我解决它的方法。
在服务器配置中:
我必须添加
rewrite ^/myNodeApp/(.*)$ / break;
到 NGINX 配置,在
location /myNodeApp/ {...}
块,在您的示例中已有的内容下。
在客户端:
我加了
<base href='/myNodeApp/'>
到我的 html 文件的
(在我的例子中是 pug 布局文件)。这会为您的子目录添加任何链接前缀。请注意,您需要从现有链接中删除所有前导的 /。例如
<link rel="stylesheet" href="layout.css">
而不是
<link rel="stylesheet" href="/layout.css">
那个让我迷惑了一会儿。
奖金:
如果您正在使用 Socket.IO,就像我一样,您将需要进行更多更改以阻止某些错误出现在您的控制台中。您需要向它传递一个路径选项并指定您的子目录。
在您的 html 个文件中
var socket = io.connect("/", {path: "/myNodeApp/socket.io"})