Nginx adiciona um cabeçalho de resposta que descreve o servidor upstream usado

1

Estou começando a usar o nginx com vários back-ends usando a diretiva upstream . Eu quero que o nginx adicione um cabeçalho de resposta que descreva qual servidor de back-end foi usado para atender a essa solicitação. Algo assim faria:

X-Backend-Server: localhost:8000

Configurei ip_hash como o mecanismo de balanceamento de carga.

Existe alguma maneira de configurar o nginx para fazer isso?

Obrigado!

    
por Mauro Ciancio 11.01.2015 / 02:23

1 resposta

0

Acabei definindo o cabeçalho no servidor backend (como sugerido pelo @MichaelHampton), então o nginx encaminha essa solicitação para o cliente. Como estou usando grails, adicionei um filtro para adicionar o cabeçalho de resposta (com base nessa resposta link )

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() {
    }
}

E adicionando isso ao 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>

Espero que isso ajude.

    
por 12.01.2015 / 16:20