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
.
我曾尝试,但收效甚微许多不同的选项,其中包括广泛的rewrite
,proxy_redirect
和proxy_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
?
在对指令的不同组合和顺序进行持续调查和测试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_redirect
为default
隐含地做同样的事情:
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)
归档时间: |
|
查看次数: |
23001 次 |
最近记录: |