我有一个反向代理的 Nginx 服务器。我只是想知道是否可以根据请求的内容类型在 Nginx 中重定向请求?
现在,我正在检查 URL 中的关键字,并根据关键字重定向请求。因此,情况如下:
location ~*/(keyword){
proxy_pass http://127.0.0.1:6565;
}
但现在我有另一个具有相同关键字的 URL。但是,请求的内容类型将是'application/json'
,我需要将该请求转发到端口 8080。是否可以区分这两个 URL?我使用的是 Nginx 1.6.2。
谢谢。
答案1
这是一个混乱的问题,因为标头的值Accept
不一定是单个条目,而是具有“质量”值的媒体类型列表,需要将其映射到可用的资源表示中以确定要发送回哪种类型。
那里可能可以使用if
语句和正则表达式匹配来修改Accept
标题内容(“如果是邪恶的”尽管如此),但要做到这一点,你几乎肯定会不得不编写一个自定义模块来进行匹配(可能针对地图)。有一个第三方接受语言模块可能包含一些有用的代码来开始。
根据更新的问题进行编辑
如果您只想根据请求主体的内容类型进行重新路由,那么生活就容易多了。我会设置一个地图内容类型到后端,然后使用该映射将变量转换$http_content_type
为要发送请求的后端。确保处理(并测试!)“异常”情况,例如“未发送内容类型”和“发送了我们意想不到的内容类型”。