Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

重新定义请求头

  • 借助proxy_set_header关键字

    • 可以重新定义或添加字段传递给代理服务器的请求头
  • 例子

    server {
    
            #https证书的相关ssl配置
            
            #多级反向代理抓出真实ip
            
            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;
            proxy_set_header Connection "Keep-Alive";
            proxy_read_timeout 90;
            proxy_http_version 1.1;
    
            localtion / {
    
            }
        }
    
    • 主要参数解释

      • proxy_set_header Host $host;
        • 把用户真实的请求Header中的Host字段,封装到请求头后,转发给下一级,以此区分最开始是从哪个域名访问的
      • proxy_set_header X-Real-IP $remote_addr;
        • 把用户真实的IP,封装到请求头后,转发给下一级
      • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        • 由于X-Forwarded-For是非rfc标准的,所以为了下一级的需要,还是要自己手动增加$proxy_add_x_forwarded_for变量,再发过去
          • 这个变量
            • 如果在第一级proxy,包含客户端请求头中的"X-Forwarded-For"(这时默认是空),与$remote_addr(真实用户ip)两部分
            • 如果在第二级proxy,包含第一级请求头中的"X-Forwarded-For"(这时里面有真实用户ip),与$remote_addr(第一级proxy的ip)两部分
      • proxy_set_header X-Forwarded-Proto $scheme;
        • 把用户真实的访问协议(http还是https),封装到请求头后,转发给下一级
      • proxy_set_header Connection "Keep-Alive";
        • 强制设置与下一级的连接为长连接
    • 其他参数解释

      • proxy_read_timeout 90;
        • 连接成功后,等候后端服务器的响应时间
      • proxy_http_version 1.1;
        • 强制设置与下一级(比如server)的http连接版本是 1.1,可以获得对长连接的支持(从1.1版本之后才有)
          • 默认都是 1.0版本 短连接,即一个请求来了,Nginx 新开一个端口和后端建立连接,后端执行完毕后主动关闭该链接
        • nginx已经自动开启了对上一级(比如client)的长连接keep alive支持(当然要保证client发送的HTTP请求要有keep alive)