我正在管理一个设置,其中有两个 ngnix 应用程序服务器位于 nginx 反向代理后面。我想设置一些标头,例如X-XSS-Protection
或Strict-Transport-Security
。目前,它在两个应用程序服务器和负载均衡器上都设置了,这导致标头变得复杂。
Error parsing header X-XSS-Protection: 1; mode=block, 1; mode=block: expected semicolon at character position 14. The default protections will be applied.
我可以看到重复的标头值被附加到同一个标头键。我的问题是:设置标头的一般惯例/公认的最佳实践是什么?我应该在后端设置标头并将其从负载均衡器中删除,还是应该由负载均衡器来设置标头?
答案1
在我看来,标头设置在哪里并不重要。在 Nginx 中设置标头的优点是,与更改代码、部署等相比,它们确实很容易更改。我曾两次使用 Nginx 或 F5 负载平衡器重写标头,它们提供了更大的灵活性。
您需要给出一个更具体的例子来获取更多有用的信息,因为您的问题太宽泛了。
答案2
作为开发人员,我还要考虑开发环境。
我们的生产环境中只有一个负载均衡器,而我们的主要预生产环境和开发环境前面没有负载均衡器。出于这个原因,我更喜欢在 NGinx Web 服务器中设置标头,以便它们也适用于开发环境。
这还取决于您是否终止 HTTPS:在负载均衡器上还是在 Nginx 上,或者两者兼而有之?出于同样的原因(保持环境一致),并且为了更好的安全性,我们在负载均衡器上终止 HTTPS,然后在负载均衡器和我们的 Web 服务器之间将流量重新加密为 HTTPS,因此如果我们直接连接到 Web 服务器,它们仍然通过 HTTPS 提供服务。
如果您的 NGinx 网络服务器不使用 HTTPS,那么当然不应在网络服务器上设置某些标头(HSTS),但这显然会引出一个问题,即在没有负载均衡器的环境中不设置这些标头时,您如何开发和测试这些标头的影响。
答案3
是的,因为处理连接是连接前端的工作。您的应用程序忙于处理自己的事务,最好将所有资源都用于处理这些事务。最好在 SSL/TLS、通用标头、重定向、平衡、阻止、丢弃等操作之前处理它们。它还为配置提供了一个很好的公共点,这是一个额外的好处。