我现在正在我们的生产站点上使用 nginx,并使用与同一台服务器上的 apache 进行反向代理,效果非常好。
我想知道我是否可以这样做:
在加拿大的机箱 #1 上安装 nginx,并让其将 http 请求反向代理到美国数据中心的机箱 #2。我知道在加载页面等时可能会有一些延迟或延迟,但最终用户可能不会注意到,特别是如果两台服务器都有 100mb 端口。机箱 #2 只处理 apache 请求,所有图像都通过 nginx 从机箱 #1 提供。
现在,最终访问者是否能够以任何方式知道有 2 个盒子正在使用?盒子 #2 包含敏感数据,如果发生黑客攻击等事件,我们不能窃取这些数据,因此这种方法有助于确保更安全。
有人知道这是否可能或者做过类似的事情吗?
答案1
如果与机箱 #2 的连接失败,nginx 将显示错误页面(带有 nginx 签名的“502 Bad Gateway”)。您可以将此页面替换为您自己的页面,该页面由机箱 #1 提供。
答案2
不,用户会认为服务器只在加拿大,因为 box#2 是后端。
..也检查一下 haproxy!
答案3
我认为您应该proxy_intercept_errors
在服务器 #1 上进行设置,以确保 #1 上生成的错误页面不会到达用户。它们可以包含有关代理后端的信息。
syntax: proxy_intercept_errors [ on|off ];
default: proxy_intercept_errors off;
context: http, server, location
This directive decides if nginx will intercept responses with HTTP status codes of 400 and higher.
By default all responses will be sent as-is from the proxied server.
继续阅读http://wiki.nginx.org/HttpProxyModule。
另外,请检查 #2 上的 apache 配置,并确保在错误页面上提供有关该主机的尽可能少的信息。例如:
ServerTokens ProductOnly
ServerSignature Off
这样可以避免 apache 在错误页面的页脚上提供版本号等信息(以防万一因为某种原因无法通过)。不过它仍然会显示“Apache”。如果您想去掉它,我认为您必须编辑httpd.h
(在源分发版中)并重新编译。