我现在正在使用nginx为我们的生产站点与反向代理到Apache在同一台服务器上,它的工作太棒了。
我想知道我是否可以这样做:
在加拿大,在#1盒子上安装nginx,并在美国的一个数据中心把它反向代理http请求到#2盒子。 我知道可能有一些延迟或加载页面等延迟,但这可能不会通知最终用户,特别是如果两台服务器有100MB的端口。 方框#2只对apache请求起作用,所有图像都通过nginx从方框#1提供。
现在,最终访问者能够以任何方式分辨出有2个盒子在使用吗? Box#2有一些敏感的数据,在黑客攻击等情况下我们不会被窃取,所以这种方法有助于保持一些安全性。
任何人都知道这是可能的还是做了类似的事情?
如果连接到#2盒子失败,nginx会显示一个错误页面(带有nginx签名的“502 Bad Gateway”)。 您可以用自己的页面replace此页面,从#1框中提供。
没有用户会认为服务器只在加拿大,因为方框#2是后端。
..也检查出haproxy!
我认为你应该在服务器#1上设置proxy_intercept_errors ,以确保在#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上的apacheconfiguration,并确保在错误页面上提供有关该主机的最less信息。 例如:
ServerTokens ProductOnly ServerSignature Off
这样可以避免apache在错误页面的页脚上提供版本号等等(无论出于什么原因都可以通过)。 但是,它仍然会说'阿帕奇'。 如果你想摆脱这一点,我认为你必须编辑httpd.h (在源代码分发),并重新编译。