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

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

我的 LAN 上有一个带有 URL 的 Web 服务器https://10.0.0.22,我正尝试通过 nginx 反向代理使用类似这样的 URL 从 Internet 访问它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/;
    }

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

答案1

在不断调查和测试不同的指令组合和顺序后,添加proxy_redirectproxy_pass指令似乎修复了 URI 翻译问题:

 proxy_redirect https://10.0.0.22/ https://domain.com/my/web/app/;

经过一些修改后,似乎设置proxy_redirectdefault隐式地做了同样的事情:

 proxy_redirect default;

完整的位置块如下所示:

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;
}

但是,图像仍然有问题,因为它们指向/images本地服务器。我不确定如何让 nginx 翻译这些图像(因为它们嵌入在 HTML 主体中),但为了暂时解决这个问题,我能够添加一个专用location/images 的位置块/my/web/app,如下所示:

    location ^~ /images/
    {
            proxy_pass https://10.0.0.22/images/;
            proxy_redirect default;
    } 

相关内容