关于解决Nginx反向代理时headers无效的问题

nginx反向代理默认行为
  • Nginx在做反向代理时,一般会设置host和ip,如果你的请求的headers里有值,它是可以同时转发过去的
Nginx反向代理时headers无效的问题
  • 有的时候我们会发现反向代理时有的header获取不到 , 原因是 : 默认情况下,并不是所有headersfields它都会转发,fields里带有下划线(_)的,Nginx视为不合法,自动抛弃不发了。例如如下:

    access_token: this is your token
    
  • 官方文档的解释:

    Syntax: underscores_in_headers on | off;
    Default: underscores_in_headers off;
    Context: http, server
    Enables or disables the use of underscores in client request header fields. When the use of underscores is disabled, request header fields whose names contain underscores are marked as invalid and become subject to the ignore_invalid_headers directive.

    文档中说明 : 想要支持下划线(_)的headers fields,就需要将underscores_in_headers设置为on ; 如果只是设置它,会发现,并没用,因为还要设置一项 proxy_pass_request_headers on;

  • 完整的解决方案如下:

    server {
    	...
    	underscores_in_headers on;
    	
    	location / {
    		proxy_pass_request_headres on;
    		proxy_pass http://server;
    	}
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章