使 nginx 反向代理 302 重定向到 URI 子文件夹而不是 root

Ste*_*HHH 6 nginx reverse-proxy

我的 LAN 上有一个带有 URL 的 Web 服务器https://10.0.0.22,我正在尝试通过 nginx 反向代理从 Internet 访问它,URL 类似于https://domain.com/my/web/app.

我遇到的困难是本地服务器将 302 重定向发送到/login.php,然后 nginx 将其传回外部客户端的浏览器,https://domain.com/login.php而不是https://domain.com/my/web/app/login.php. 这会导致 404 错误,因为https://domain.com/login.php.

我曾尝试,但收效甚微许多不同的选项,其中包括广泛的rewriteproxy_redirectproxy_buffering指令,但是这是接近我可以得到它:

    location ^~ /my/web/app/
    {
            proxy_buffering   off;
            rewrite           /my/web/app/(.*) /$1 break;
            proxy_pass        https://10.0.0.22/;
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法配置 nginx 以便内部 Web 服务器的 302 重定向到 /login.php外部显示为/my/web/app/login.php

Ste*_*HHH 6

在对指令的不同组合和顺序进行持续调查和测试proxy_redirect后,在proxy_pass指令之后添加似乎解决了 URI 转换问题:

 proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;
Run Code Online (Sandbox Code Playgroud)

经过一些修补之后,似乎设置proxy_redirectdefault隐含地做同样的事情:

 proxy_redirect default;
Run Code Online (Sandbox Code Playgroud)

完整的位置块看起来像这样:

location ^~ /my/web/app/
{
        proxy_buffering   off;
        rewrite           /my/web/app/(.*) /$1 break;
        proxy_pass        https://10.0.0.22/;
        #proxy_redirect    https://10.0.0.22/ https://domain.com/my/web/app/;
        proxy_redirect    default;
}
Run Code Online (Sandbox Code Playgroud)

但是,图像仍然损坏,因为它们指向/images本地服务器。我不知道如何让nginx的翻译者(因为它们嵌入在HTML体),但要解决这个问题,现在,我可以添加一个专用location/images 之前的位置块/my/web/app,像这样:

    location ^~ /images/
    {
            proxy_pass https://10.0.0.22/images/;
            proxy_redirect default;
    } 
Run Code Online (Sandbox Code Playgroud)