我目前正在同一台计算机上运行两个Web服务器,一个通过Gunicorn使用Django,这是我的原始网站,另一个使用同一域充当网上商店,另一个使用Nestjs(Nodejs)。
这两台服务器都有一个/admin
路径,原始路径位于example.com/admin,而另一个我希望位于example.com/store/admin。但是,每当我在浏览器中输入第二个URL(即example.com/store/admin)时,它都会返回另一个管理页面example.com/admin(不带/ store前缀)。
这是我认为需要重做的配置代码段:
server {
server_name example.com www.example.com;
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
location /store {
proxy_pass http://127.0.0.1:3000/;
}
location = /store/admin {
proxy_pass http://127.0.0.1:3000/admin/;
}
...
}
我已经尝试了/ store和/ store / admin位置块的相当几种组合,但是似乎无法将其定向到商店的服务器管理站点。使用nodejs服务器进行测试时,它可以在我的本地开发计算机上运行。转到http://example.com/store会返回我希望从Nestjs服务器看到的内容。
答案 0 :(得分:1)
docs指出:
...要查找与给定请求匹配的位置,nginx首先检查使用前缀字符串定义的位置(前缀位置)。其中,会选择并记住具有最长匹配前缀的位置。 ...
所以您只需要两个位置块:
第一个:
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
另一个带有重写:
location /store {
rewrite ^/store(.*) $1 break;
proxy_pass http://127.0.0.1:3000;
}
这意味着它将重写以/store
开头的每个URL,并在传递到上游之前将其从URL中删除。并且它也包括/admin
,因为它是相同的。
还请注意,/
的末尾没有后缀proxy_pass
-指示NGINX接受用户提供的URI。