Nginx反向代理配置来处理绝对路径

时间:2015-05-20 12:49:43

标签: nginx reverse-proxy

我正在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;
    }

1 个答案:

答案 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前缀(这似乎没有标准名称),您可以设置它以避免这个问题。