我开始使用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>
希望这可以帮助。