我构建了一个 Web 应用程序,它将监听端口并处理 HTTP 请求。例如,如果我在 本地运行它127.0.0.1:3000
。我可以http://127.0.0.1:3000/path/within/app
在浏览器上使用 访问它。我想将它部署在我的其中一台服务器上,该服务器配置为nginx
处理所有传入请求(和 TLS)并将它们转发到不同的应用程序(在 监听http://127.0.0.1:xxx
)。通常,我会为每个应用程序提供不同的子域(例如,使用app1
和app1.example.com
使用app2
访问),但如果我可以使用子路径(例如,使用和使用访问)app2.example.com
会更方便。但我不确定如何配置它。app1
example.com/app1
app2
example.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/;
}
我想实现以下目标。
- 当我访问的时候
https://example.com/app1
,就相当于访问了http://127.0.0.1:3000
。 - 当我访问时
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/;
}