Nginx 添加一个响应头,描述所使用的上游服务器

Nginx 添加一个响应头,描述所使用的上游服务器

我开始使用upstream指令将 nginx 与多个后端结合使用。我希望 nginx 添加一个响应标头,描述哪个后端服务器用于处理此请求。类似这样的操作:

X-Backend-Server: localhost:8000

我已配置ip_hash为负载平衡机制。

有什么方法可以配置 nginx 来做到这一点?

谢谢!

答案1

我最终在后端服务器中设置了标头(如 @MichaelHampton 所建议的那样),因此 nginx 将此请求转发给客户端。由于我使用的是 grails,因此我添加了一个过滤器来添加响应标头(基于此答案https://stackoverflow.com/questions/6415452/grails-add-header-to-every-response

import javax.servlet.*
import org.apache.commons.logging.LogFactory

class AddLocalHostnameToResponseFilter implements Filter {

    static final logger = LogFactory.getLog(this)
    String hostname

    void init(FilterConfig config) {
        try {
            this.hostname = InetAddress.localHost.hostName ?: 'unknown'
        } catch (Exception e) {
            logger.error("error", e)
            this.hostname = 'unknown'
        }
    }

    void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        response.setHeader('X-Backend', this.hostname)
        chain.doFilter(request, response)
    }

    void destroy() {
    }
}

并将其添加到web.xml

<filter>
    <filter-name>addLocalHostnameToResponseFilter</filter-name>
    <filter-class>AddLocalHostnameToResponseFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>addLocalHostnameToResponseFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

希望这可以帮助。

相关内容