You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Nginx实现同端口根据请求头转发前后端服务?

Nginx配置实现基于Accept请求头的分流转发

完全可以通过Nginx实现这个需求,核心逻辑就是根据请求的Accept头字段,将请求转发到对应的后端服务,和Mastodon的默认行为一致。

下面是针对你的场景的具体配置示例:

server {
    listen 80;
    server_name localhost;

    # 定义Accept头与后端服务的映射关系
    map $http_accept $backend_service {
        default http://127.0.0.1:8000; # 未匹配到JSON请求头时,默认转发到前端服务
        ~*application/json http://127.0.0.1:8080; # 匹配包含application/json的Accept头,转发到后端API
    }

    location / {
        proxy_pass $backend_service;
        # 传递必要的请求头给后端服务,避免服务异常
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

配置关键点说明

  • map $http_accept $backend_service:这是Nginx的映射指令,读取请求头Accept的值,根据规则给$backend_service变量赋值。规则从上到下匹配,第一个命中的规则生效。
  • 匹配规则~*application/json是不区分大小写的正则匹配,只要Accept头里包含application/json就会命中后端服务;如果需要严格匹配Accept: application/json(不允许其他值共存),可以把规则改成^application/json$。
  • proxy_pass $backend_service:根据映射后的变量,将请求转发到对应的前端或后端服务。
  • 额外的proxy_set_header配置是为了把原请求的关键信息(如主机名、客户端IP等)传递给后端服务,确保服务能正常处理请求。

测试时可以用curl验证:

# 默认返回前端HTML
curl http://localhost/@Gargron

# 添加Accept头后返回后端JSON
curl -H 'Accept: application/json' http://localhost/@Gargron

内容的提问来源于stack exchange,提问作者Wu_Ming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:44:14