我正在http://localhost:9000
上运行网络应用程序
我想将代理转发给http://localhost/myapplication
。
问题是应用程序正在使用绝对路径<a href="/some-directory/some-file.html">link</a>
,它使用我当前的配置转换为http://localhost/some-directory/some-file.html
。
如何配置nginx来处理这些路径,以便它们指向http://localhost/myapplication/some-directory/some-file.html
?
现在,代理传递配置如下所示:
location /myapplication/ {
proxy_pass http://localhost:9000/;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
答案 0 :(得分:0)
与https://serverfault.com/questions/714322/nginx-proxy-pass-and-absolute-paths类似的问题。所以这是我在那里的答案(稍微适合你的例子):
我发现这项工作的唯一方法是HttpSubModule并添加sub_filter
指令。所以给出你的例子,它看起来像这样:
sub_filter 'href="/' 'href="/myapplication/';
显然,您的匹配越具体,您需要添加的变体越多。如果你不那么具体,比如只匹配"/
或'/
,那么你需要的规则越少,但却会遇到替换错误事物的危险。
您可能还需要添加:
sub_filter_types *;
所以它不仅匹配text/html
(这是默认值),还匹配javascript和css文件。显然*
是一种可能会破坏事物的懒惰方法,应该首选使用特定的mimetypes。
最终,正确的方法是修复Web应用程序。大多数Web框架都支持基本url / root url / url前缀(这似乎没有标准名称),您可以设置它以避免这个问题。