分类
devops

proxy_pass_header and proxy_hide_header

By default, nginx does not pass the header fields “Date”, “Server”, “X-Pad”, and “X-Accel-…” from the response of a proxied server to a client.

proxy_pass_header 是 Nginx 配置中的一个指令,用于控制是否将上游服务器(即被代理的服务器)返回的响应头传递给客户端。默认情况下,Nginx 会过滤掉一些响应头,如 Date、Server 等。通过 proxy_pass_header,可以显式地允许某些头字段传递给客户端。

proxy_hide_header:与 proxy_pass_header 相反,用于隐藏某些响应头,不传递给客户端。

示例场景

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_server;

        # 允许传递 "Server" 头给客户端
        proxy_pass_header Server;
       # 想隐藏 "X-Custom-Header" 头
        proxy_hide_header X-Custom-Header;

        # 其他代理配置
        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_pass_header 和 proxy_hide_header 这两个指令容易引起误解。从名字上看,容易让人误以为是控制向上游服务器(upstream) 传递或隐藏哪些头,而实际上它们的作用是控制从上游服务器返回的响应头是否传递给 客户端(浏览器)。