nginx:为某些IP地址提供站点服务,为其他IP地址提供代理通行证

nginx:为某些IP地址提供站点服务,为其他IP地址提供代理通行证,nginx,Nginx,我们正在开发一个新网站。我们想更新指向我们服务器的域,这样当我们得到客户的同意时,我们可以快速发布站点 同时,所有IP地址都应该被代理传递到旧站点(IP地址),我们(和客户)应该被重定向到新站点 现在它正在工作,但它是一个丑陋的黑客与一些如果语句。我读到这是不推荐的 目前的配置如下所示: server { listen x.x.x.x:80; server_name yyyyy; root /etc/www; index index.html index.htm;

我们正在开发一个新网站。我们想更新指向我们服务器的域,这样当我们得到客户的同意时,我们可以快速发布站点

同时,所有IP地址都应该被代理传递到旧站点(IP地址),我们(和客户)应该被重定向到新站点

现在它正在工作,但它是一个丑陋的黑客与一些如果语句。我读到这是不推荐的

目前的配置如下所示:

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;
    }
    .....

这样做的正确方法是什么?

您可以使用geo ip模块根据客户端的ip地址设置一个变量根:

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并不总是邪恶的
If
这是你唯一的选择