我如何去除 Nginx 中的基础 url 以获得 Mojolicious 应用程序?

How can I strip the base url in Nginx for a Mojolicious app?

我正在尝试 运行 Mojolicious 作为反向代理。我的 Nginx 配置如下所示:

upstream printo {
    server 127.0.0.1:3000;
}

[..]

location /print {
   proxy_pass http://printo;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
}

我想在请求到达 Mojolicious 应用程序之前去除 URL 的 /printo 部分 - 否则,所有请求都有 /printo/something URL ,结果是 404.

我看过 this 但如果可能的话我想在 Nginx 中做。

我试过这样重写:

rewrite ^/print/(.+)$ ;

没有结果。

怎么做到的?

要修改向上游传递的 URI,您可以使用 rewrite...break 或使用 proxy_pass 指令本身执行类似的功能。

例如:

location /print {
    rewrite ^/print(/.*)$  break;
    proxy_pass http://printo;
    ...
}

记得在重写的 URI 中保留前导 /。有关详细信息,请参阅 this document。 或者:

location /print/ {
    proxy_pass http://printo/;
    ...
}

location 值应该有尾随 / 以确保正确进行文本替换。有关详细信息,请参阅 this document