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

Nginx配置求助:域名转发保留URL及动态查询参数

Nginx配置实现跨域请求转发(地址栏保持原URL+传递所有查询参数)

我之前刚好处理过一模一样的需求,给你一套可以直接复用的Nginx配置,同时拆解下每个部分的作用,方便你理解和调整:

server {
    listen 443 ssl;
    server_name firstserviceendpoint.com;

    # 替换成你自己的SSL证书路径
    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/private.key;

    location /app/products {
        # 核心转发规则:直接指向服务2的域名,Nginx会自动带原请求的URI和所有查询参数
        proxy_pass https://secondServiceEndpoint.com;

        # 保留原请求的Host头,避免服务2因为Host不匹配拒绝请求
        proxy_set_header Host $host;
        # 传递原请求的Referer头,部分服务会校验这个字段
        proxy_set_header Referer $http_referer;
        # 把客户端真实IP传给服务2,方便日志排查
        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;

        # 处理跨域CORS问题,让浏览器接受跨域响应
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
        add_header Access-Control-Allow-Headers *;
        add_header Access-Control-Allow-Credentials true;

        # 浏览器预检请求直接返回204,不用转发到服务2
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
}

关键配置说明:

  • proxy_pass 写法:这里只写服务2的域名,而不是完整路径,Nginx会自动把原请求的/app/products和后面所有查询参数(比如?param1=a&param2=b)拼接到服务2的域名后,完美实现参数全传递。如果写成proxy_pass https://secondServiceEndpoint.com/app/products;也能行,但前者更灵活,后续路径变动时不用改这一行。
  • proxy_set_header 系列:这些头是为了让服务2“以为”请求是直接来自服务1的,避免因为Host校验、IP白名单等规则拒绝请求,同时也能让服务2的日志记录到真实的客户端IP。
  • CORS响应头:因为是跨域名转发,浏览器会触发同源策略校验,添加这些头可以让浏览器允许跨域请求,尤其是如果你的请求带Cookie或者自定义头的话,Access-Control-Allow-Credentials true是必须的。
  • OPTIONS请求处理:浏览器在发送POST/PUT这类非简单请求前,会先发一个OPTIONS预检请求确认权限,直接返回204可以减少不必要的转发,提升性能。

额外注意事项:

  1. 确保你的Nginx已经安装了ngx_http_proxy_module(默认编译时都会包含,不确定的话可以用nginx -V查看编译参数)。
  2. 配置写完后,用nginx -t命令检查语法是否正确,没问题的话执行nginx -s reload重启生效。
  3. 如果服务2有特殊的请求头校验,比如需要特定的User-Agent,可以在proxy_set_header里添加对应的字段。
  4. 如果需要转发服务1的所有请求(而不只是/app/products),把location /app/products改成location /即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:59