如何在位置匹配中重写request_uri变量

时间:2018-12-29 03:28:46

标签: nginx

Java后端为我提供了几个接口,例如:

componentDidMount(){
        let url ='/api/firstPage';
        fetch(url, {
            method: 'GET',
            credentials: 'include',
            header: {
                'Content-Type': 'application/json'
            },
        })
        .then(res => res.json())
        .then(data => this.setState({
            "response": data
        }));
}

我是一名前端工程师,我必须在ajax中使用这些接口。因为我们将项目部署在同一服务器上,所以我需要使用nginx代理将那些ajax请求定向到Java服务。但是如您所见,接口以不同的路径开头,因此我在代码中以“ / api”作为前缀,并按如下方式配置nginx

@bp.route('api/firstPage', methods=("GET",))
def firstPage():
    ...
    return cors_res(initData)

我的问题来了:

实际上,java服务获取请求路径:/ api / admin / login,而不是/ admin / login,因此它们无法处理该请求。我可以在Nginx中重写我的request_uri,以便Java获得不带/ api前缀的请求吗?

2 个答案:

答案 0 :(得分:1)

您不需要为此进行任何重写。使用以下location块:

location /api/ {
    proxy_pass http://127.0.0.1:8080/;
    proxy_set_header Host 127.0.0.1;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

proxy_pass指令here中查看有关斜杠的更多信息。

答案 1 :(得分:0)

different question粘贴并改编的副本,但是应该可以解决问题。

location /api {
 rewrite ^/api(/.*)$ $1 last;
}