带子路径的 nginx 反向代理

带子路径的 nginx 反向代理

我构建了一个 Web 应用程序,它将监听端口并处理 HTTP 请求。例如,如果我在 本地运行它127.0.0.1:3000。我可以http://127.0.0.1:3000/path/within/app在浏览器上使用 访问它。我想将它部署在我的其中一台服务器上,该服务器配置为nginx处理所有传入请求(和 TLS)并将它们转发到不同的应用程序(在 监听http://127.0.0.1:xxx)。通常,我会为每个应用程序提供不同的子域(例如,使用app1app1.example.com使用app2访问),但如果我可以使用子路径(例如,使用和使用访问)app2.example.com会更方便。但我不确定如何配置它。app1example.com/app1app2example.com/app2

我当前的配置文件如下。假设我的应用程序正在监听127.0.0.1:3000

location ^~ /app1 {
    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_redirect      off;
    proxy_pass          http://127.0.0.1:3000/;
}

我想实现以下目标。

  1. 当我访问的时候https://example.com/app1,就相当于访问了http://127.0.0.1:3000
  2. 当我访问时https://example.com/app1/path/within/app,它将相当于访问http://127.0.0.1:3000/path/within/app

但是,使用上述配置文件,只有第一部分有效。如果我访问https://example.com/app1/path,我的应用程序会抱怨它http://127.0.0.1:3000//path实际上被访问了,并且它不知道如何处理//path

我希望不修改应用程序的任何部分,以便将来决定为其添加子域时它可以独立运行,并且希望仅通过修改 nginx 配置文件(如果可能)即可解决问题。此外,我知道应用程序生成的任何可点击链接也需要处理子路径,但这个应用程序足够简单,这不是问题。

谢谢。

答案1

尝试以下配置

location /app1/ {
    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_redirect      off;
    proxy_pass          http://127.0.0.1:3000/;
}

location /app1 {
    return 301 /app1/;
}

相关内容