我们正在开发一个新网站。我们想更新指向我们服务器的域名,以便我们能够在客户得到好的时候快速发布该网站。
与此同时,所有IP地址都应该代理到旧网站(IP地址),我们(和客户)应该重定向到新网站。
现在它正在运行,但它是一个丑陋的黑客,有一些if语句。我读过这不推荐。
现在配置是这样的:
server {
listen x.x.x.x:80;
server_name yyyyy;
root /etc/www;
index index.html index.htm;
set $needRewrite Y;
if ($remote_addr ~* w.x.y.z) { set $needRewrite N;}
location / {
if ($needRewrite = Y) {
proxy_pass http://old_address;
break;
}
try_files $uri $uri/ /index.php?$args;
}
.....
这样做的正确方法是什么?
答案 0 :(得分:1)
您可以使用geo ip模块根据客户端的IP地址获得变量root:
geo $www_root {
default /etc/www;
w.x.y.z/32 /etc/client/www;
}
server {
listen x.x.x.x:80;
server_name yyyyy;
root $www_root;
index index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
注意:上述配置仅在两个站点使用相同的IP地址时才有效。如果您的服务器位于不同的IP地址,您只需重定向到客户端的预览站点:
geo $client {
default 0;
w.x.y.z/32 1;
}
server {
listen x.x.x.x:80;
server_name yyyyy;
root /etc/www;
index index.html index.htm;
try_files $uri $uri/ /index.php?$args;
location / {
if ($client) {
return 302 http://client-preview-site;
}
}
}
注意:如果并非总是邪恶的if
,那么这是你唯一的选择。 ;)