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

配置Nginx正向代理避免301重定向以解决CORS问题

Nginx CORS代理配置解决方案

问题根源

  • 目标站点(比如google.com)大多强制HTTP跳转HTTPS,你当前配置用http://$1发起请求,直接触发目标站点的301重定向
  • 未正确传递目标站点的Host头,导致Cloudflare等防护站点验证失败
  • 重定向后客户端直接跳转至目标站点,完全绕开了代理,CORS限制自然无法解决

修正后的完整配置

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name proxy.example.com;

    # 拆分请求路径中的目标域名和后续路径
    location ~ ^/(?<target_host>[^/]+)(?<target_path>/.*)?$ {
        # 全局允许跨域
        add_header Access-Control-Allow-Origin * always;
        add_header Access-Control-Allow-Methods *;
        add_header Access-Control-Allow-Headers *;

        # 快速处理CORS预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }

        # DNS解析配置,添加缓存提升效率
        resolver 8.8.8.8 valid=300s;
        resolver_timeout 5s;

        # 传递正确的Host头,适配Cloudflare等防护机制
        proxy_set_header Host $target_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 禁用自动重定向跟随,替换响应中的目标域名避免客户端跳转
        proxy_redirect off;
        proxy_redirect ~^https?://$target_host/(.*) /$target_host/$1;

        # 拼接完整的HTTPS目标URL发起代理请求
        proxy_pass https://$target_host$target_path$is_args$args;
    }
}

关键修改说明

  • 改用HTTPS请求目标站点:直接用https://发起代理请求,从根源避免HTTP→HTTPS的301重定向
  • 路径正则拆分:通过正则捕获独立的目标域名和后续路径,避免请求路径混乱
  • Host头正确传递:让目标站点识别到真实的访问域名,解决Cloudflare等站点的验证拦截问题
  • 重定向拦截替换:把响应中目标站点的跳转链接替换成代理域名的链接,确保客户端始终走代理访问
  • 预检请求处理:针对CORS的OPTIONS请求直接返回204,避免预检失败导致的跨域报错

额外注意事项

  • 确保你的Nginx已默认包含ngx_http_proxy_module(绝大多数安装包都自带)
  • 部分有严格反爬或防盗链的站点可能会拦截代理请求,测试时尽量选择公开无限制的站点
  • 若目标站点有特殊的请求头要求,可自行添加对应的proxy_set_header配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:26