Nginx反向代理和路径重写

116次阅读
没有评论

问题描述

想要使用Nginx将请求代理到不同的域名,并且还想对路径的一部分进行重写。例如,将http://origin.com/代理到http://target.com/_plugin/kibana。用户想知道如何实现对任何请求路径自动添加_plugin/kibana并转发到目标服务器。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

对于这种情况,你不需要使用rewrite指令,因为你想要将_plugin/kibana附加到任何路径上。
假设Nginx配置是针对http://origin.com/的:

server {
    listen 80;
    server_name origin.com;
    location / {
        proxy_set_header X-Forwared-Proto $scheme;
        # http://origin.com/req/1/2将会被转发到http://target.com/_plugin/kibana/req/1/2
        proxy_pass http://target.com/_plugin/kibana;
    }
}

在上面的示例中,我们定义了一个服务器块,监听80端口,并将origin.com作为服务器名。在location /中,我们设置了proxy_set_header指令来传递协议头。然后,我们使用proxy_pass指令将请求转发到http://target.com/_plugin/kibana
这样,无论用户请求的路径是什么,都会自动在路径前面添加_plugin/kibana并转发到目标服务器。

方案2

如果你需要对不同的路径进行不同的重写,可以使用多个location块。
如果你需要对不同的路径进行不同的重写,你可以使用多个location块。每个location块可以定义不同的重写规则和转发目标。
以下是一个示例配置:

server {
    listen 80;
    server_name origin.com;

    location / {
        proxy_set_header X-Forwared-Proto $scheme;
        # http://origin.com/req/1/2将会被转发到http://target.com/_plugin/kibana/req/1/2
        proxy_pass http://target.com/_plugin/kibana;
    }

    location /api {
        proxy_set_header X-Forwared-Proto $scheme;
        # http://origin.com/api/req/1/2将会被转发到http://target.com/_plugin/kibana/api/req/1/2
        proxy_pass http://target.com/_plugin/kibana/api;
    }
}

在上面的示例中,我们定义了两个location块。第一个location /块将所有请求转发到http://target.com/_plugin/kibana,并在路径前面添加_plugin/kibana。第二个location /api块将以/api开头的请求转发到http://target.com/_plugin/kibana/api,并在路径前面添加_plugin/kibana/api
这样,不同的路径将根据定义的规则进行重写和转发。

正文完