nginx的rewrite怎么带入原有请求的Headers里面的值

我有个请求地址比如:http://a.example.com/xx 我想在nginx里面配置一下,当访问http://a.example.com/xx跳转去访问http://b.example.com/xx,我用了rewrite模块,但是访问http://a.example.com/xx时的header值没有带过去,这有什么解决方案?
以下是我的nginx配置:

server {
    listen       80;
    server_name  a.example.com;
    listen       443 ssl;

    ssl_certificate      cert/a/214137293780676.pem;
    ssl_certificate_key  cert/a/214137293780676.key;

    location / {
       proxy_buffer_size  128k;
       proxy_buffers   32 32k;
       proxy_busy_buffers_size 128k;
       fastcgi_buffer_size 128k;
       fastcgi_buffers 32 32k;
       proxy_ignore_client_abort on;
       index  /index;
       proxy_pass  http://127.0.0.1:10000;
       proxy_redirect         off;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
       rewrite '^/xx$' http://b.example.com/xx;
    }
}
阅读 9.3k
1 个回答

这里rewrite进行的是302跳转,302跳转是不能传递原来请求的header的。
如果要传递header, 你需要配置反向代理

server {
    listen       80;
    server_name  a.example.com;
    listen       443 ssl;

    ssl_certificate      cert/a/214137293780676.pem;
    ssl_certificate_key  cert/a/214137293780676.key;

    location / {
       proxy_buffer_size  128k;
       proxy_buffers   32 32k;
       proxy_busy_buffers_size 128k;
       fastcgi_buffer_size 128k;
       fastcgi_buffers 32 32k;
       proxy_ignore_client_abort on;
       index  /index;
       proxy_pass  http://127.0.0.1:10000;
       proxy_redirect         off;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Host $http_host;
    }
    location = /xx {
        proxy_pass http://b.example.com/xx;
        proxy_set_header Host b.example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        break;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题