如何使Nginx重写HTTP正文内容中的URI?


14

这是我早先有关如何使nginx反向代理302重定向到URI子文件夹而不是root的问题的后续内容。

我有一个Nginx代理服务器,该服务器使用rewriteproxy_pass指令将外部请求代理到URL,就像https://domain.com/my/web/app/位于的内部LAN服务器一样https://10.0.0.22/。这是我尝试用ASCII UML表示翻译的尝试:

                                    .-------------.       .------------------.
                                    | Nginx proxy  |      | Local web server |
                                    | (domain.com) |      | (10.0.0.22)      |
                                    '-------------'       '------------------'
                                               |                 |
                                               |                 |
GET https://domain.com/my/web/app/ ----------->|                 |
                                               |---------------->| GET /
                                               |                 |
                                               |<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------|                 |
                                               |                 |
GET https://domain.com/my/web/app/login.php -->|                 |
                                               |---------------->| GET /login.php
                                               |                 |
                                               |<----------------| 200
HTML body content (images, CSS, links) <-------|

这是我的nginx配置文件中的实际位置块:

location ^~ /my/web/app/
{
    proxy_buffering   off;
    rewrite           /my/web/app/(.*) /$1 break;
    proxy_pass        https://10.0.0.22/;
    proxy_redirect    default;
}

它非常适合HTTP请求和响应的内部和外部URI路径之间的URI转换,但是HTML内容(正文图像,CSS,脚本)中的所有URI都不会转换。

例如,将HTML响应中嵌入了具有相对路径的图像(带有/images/logo.png之类的URI)传递回Web客户端,并解释为https://domain.com/images/logo.png而不是https://domain.com/my/web/app/images/logo.png

我能理解为什么会这样,但是如果有一种动态代理内容和请求的方法,那将是很棒的。有没有办法让Nginx转换嵌入在HTML内容中的URI?当HTML内容通过代理服务器时,是否可以动态解析和更新HTML内容?


2
您找到解决方案了吗?如果可以,您可以将其发布为答案吗?
惠更斯2014年

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.