我目前在同一台机器上运行两个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服务器上看到的内容。
文档声明:
。。。为了找到与给定请求匹配的位置,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。