问题描述
想要使用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
。
这样,不同的路径将根据定义的规则进行重写和转发。