允许多个IP到站点,重定向nginx

时间:2016-07-20 09:59:32

标签: apache .htaccess nginx plesk

我搜索了论坛,但我找不到任何相关信息(或者不可能)。

我有一个像这样的.htaccess文件:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.2$
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.3$
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.4$
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.5$
RewriteCond %{REMOTE_ADDR} !^127\.0\.1\.[0-9]{1,3}$
RewriteRule .? http://disney.com/ [L]

哪个有效,但是我们已经转移到了nginx。现在我一直认为.htaccess也适用于nginx。显然它没有,我昨天才发现这个,因为有人给我发了一封关于网站可以访问的电子邮件(或者说更好的说错误)。它根本不应该是可访问的!

无论如何,现在我很难让上述规则在nginx中运行。

感谢stackoverflow上的一些帖子,我找到了这个链接:https://winginx.com/en/htaccess

然而,这不起作用。它只创建1个IP重定向规则......?

所以,至于我的问题;

  1. 是否可以允许多个IP,同时将所有其他IP重定向到其他域?
  2. 如果可以,那么正确的方法是什么?
  3. 提前谢谢。

    更新: 没有人有这个解决方案......? 我一直耐心等待,但没有人回答。这甚至可能吗?如果这不可能,请告诉我。谢谢!

    编辑: 纠正我,如果我误解了,但上面的RewriteCond应该只允许提到的IP进入我的网站,所有其他人都被重定向到(在这个例子中)迪士尼,对吗?至少这是它在.htaccess中的工作方式。

    换句话说。 IP 127.0.0.1的用户访问我的网站,因为他们是允许的规则。当IP 127.0.5.99的用户访问我的网站时,他/她将被重定向到disney.com。

    下面的所有例子都是相反的。那个或我正在阅读(并理解)它显然是完全错误的。

    这是我目前在“附加nginx指令”字段中所拥有的内容:

    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml application/x-font-ttf font/opentype;
    
    location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
        proxy_read_timeout 90;
        fastcgi_read_timeout 90;
    }
    

    别无其他。

    顺便说一下;此域名在CentOS 6.8下使用Plesk 12.5运行。不知道这是否重要。我正在设置Plesk CP的“附加nginx指令”。

1 个答案:

答案 0 :(得分:1)

您正在使用Plesk,我不会在Plesk CP中添加其他nginx指令'而是在/etc/nginx/nginx.conf下(&#39) ; HTTP' -section)

快速举例:

if ($remote_addr !~ "^88\.33\.160\.132$"){
    set $rule_0 1$rule_0;
}

if ($remote_addr !~ "^214\.166\.12\.70$"){
    set $rule_0 2$rule_0;
}

if ($remote_addr !~ "^69\.232\.83\.[0-9]{1,3}$"){
    set $rule_0 3$rule_0;
}

if ($rule_0 = "321"){
    rewrite /.? http://disney.com/ last;
}

我自己测试了这个并且没有问题(IP' s是随机的)。

总的来说;这也是你想要添加gzip缓存函数的地方。

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml application/x-font-ttf font/opentype;

location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff)$ {
   expires 30d;
   add_header Pragma public;
   add_header Cache-Control "public";
   proxy_read_timeout 90;
   fastcgi_read_timeout 90;
}

我强烈建议避免使用Plesk系统,因为根据我个人的经验,这可能并且可能会导致问题。

您可能还想查看一些关于nginx的教程。以下是非常有用的:

您可能还想查看Plesk的论坛,了解有关这类问题的一般答案。

我希望这有帮助!