【问题标题】:how to disable direct access to a web site by ip address如何禁用通过IP地址直接访问网站
【发布时间】:2015-05-20 05:26:57
【问题描述】:

我在 VPS 上有一个网站。

我遇到的问题是,当我输入服务器的 IP 时,它会链接到网站。
即使输入 mail.domain.com,它也会做同样的事情。

如何禁用它,以便访问者收到消息或被定向到域?

我尝试禁用 IP 并在 cloud flare 上发送记录,但没有成功。

我的设置是:

VPS on Linux Debian 
Nginx
no control panel just command line
Cloudflare
DNS setup with BIND

【问题讨论】:

  • 如果是 apache 服务器,你可以使用 .htaccess。
  • 修正了一些语法和格式

标签: nginx dns ip server cloudflare


【解决方案1】:
server {
    listen      80 default_server;
    listen      [::]:80 default_server;
    server_name "";
    return      444;
}

您需要指定default_server 参数,以便所有不可用的服务器请求都转到抛出444 errorserver block

444:连接关闭而没有响应

参考:https://httpstatuses.com/444

【讨论】:

  • 您应该解释一下444 的含义。我以前没见过那个。 httpstatuses.com/444
  • https 呢?
  • @mahfuz for https 你可以添加listen 443 ssl;
  • 对于 https,您需要创建自签名证书。在没有证书的情况下无法对 https 请求进行 444 响应。
  • @Howard 但是 444 不是回应。 NGINX 只会在return 444; 上挂断连接。
【解决方案2】:

你可以使用重定向,nginx配置:

server {
        listen 80;
        server_name IP_ADDRESS;
        return 301 http://YOUR.DOMAIN;
}

【讨论】:

  • 这里要解决的具体问题是必须明确定义 IP 地址并重定向或使用 403 等阻止。我已经删除了配置中对我的 IP 地址的所有引用,但它仍然显示为 IP - 这让我发疯了。但是,如果不被覆盖,它似乎会退回到允许 IP 访问。谢谢!
  • 这也只适用于我当监听指令也有确切的 IP 否则 nginx 匹配一个更具体的服务器块虽然 server_name 不匹配。
  • 如何根据访问者做一个return 301:如果是本地的,nginx应该重定向到192.168..,如果它来自远程,然后是domain.com。
  • 把这个放到/etc/nginx/conf.d/default.conf
  • 谢谢,这对我有用,但我的应用仍然可以使用 IP_ADDRESS:<PORT_NUM> 访问。我该如何解决?
【解决方案3】:

您可以在其他人之前添加一个服务器指令。

server {
    listen 80;
    server_name _;
    return 404;
}

【讨论】:

  • 如果其他服务器块之一具有default_server,这会起作用吗? _有特殊含义吗?
  • 来自nginx.org/en/docs/http/server_names.html:在包罗万象的服务器示例中,可以看到奇怪的名称“_”:...这个名称没有什么特别之处,它只是无数无效域中的一个永远不会与任何真实姓名相交的名字。其他无效名称,如“--”和“!@#”也可以同样使用。
  • @mpen 如果其他集合之一default_server 将不起作用。 _没有特殊含义,什么都可以用。
【解决方案4】:

你可以使用重定向,nginx配置:

server {
        listen 80;`enter code here`
        server_name IP_ADDRESS;
        return 301 http://YOUR.DOMAIN;
}

【讨论】:

  • 欢迎来到 Stack Overflow!请注意,虽然代码 sn-p 本身就是一个有用的答案,但最好为未来的读者留下一些评论,说明为什么这可以解决问题。谢谢!
  • 此解决方案的问题是您需要预先知道服务器的 IP 地址。新事物(例如在分布式架构上运行)可能会经常将您的 nginx 移动到不同的 IP。
【解决方案5】:

您可以返回任何您认为合适的错误。可以在此处找到错误列表List_of_HTTP_status_codes

server {
    listen      x.x.x.x:80;
    server_name x.x.x.x;
    return      404;
}  

【讨论】:

    【解决方案6】:

    您可以尝试将服务器IP地址设置在:

    /etc/nginx/conf.d/default.conf
    

    所以它看起来像这样:

    server {
        listen 80;
        server_name localhost IP.OF.VPS.HERE;
    

    然后你可以指定子域vhost,比如:

    server {
            listen 80;
            server_name subdomain.domain.com;
    

    还有主域,比如:

    server {
            listen 80;
            server_name www.domain.com domain.com;
    

    然后重启Nginx:

    /etc/init.d/nginx restart
    

    每个虚拟主机都应该有自己的 *.conf 文件(以便更好地组织),例如:

    /etc/nginx/conf.d/subdomain.domain.com.conf
    /etc/nginx/conf.d/domain.com.conf
    /etc/nginx/conf.d/default.conf
    

    【讨论】:

    • 会自动读取所有*.conf 文件吗?还是我需要将它们包含在某个地方?
    • @luckydonald nginx.conf 自动包含 conf.d 目录下的所有文件include /etc/nginx/conf.d/*.conf;
    【解决方案7】:

    把它放在你的 /etc/nginx/conf.d/SERVER_IP_ADDRESS.conf 文件的顶部,并评论它下面的所有内容。

    #disabling accesing server by ip address
    server {
            listen SERVER_IP_ADDRESS:80 default;
            server_name _;
            return 404;
    }
    

    然后重启你的 Nginx 服务器(在 Ubuntu 上是通过service nginx restart这个命令完成的)

    现在,当您将服务器的 ip 地址放入浏览器 url 字段时,您将收到 404 错误。

    【讨论】:

      【解决方案8】:
      if ($http_host != "example.com") {
          return 301 https://example.com;
      }
      

      【讨论】:

        【解决方案9】:
        server {
            listen 80 default_server;
            listen [::]:80 default_server;
            listen 443 default_server;
            listen [::]:443 default_server;
            return 444;
        }
        

        不要费心为接收器支持 HTTP/2 或 SSL 连接。 没有那些不必要的东西,它确实包罗万象。 对于不受支持的,它只是拒绝此类连接。

        https://stackoverflow.com/a/68042877/4510033

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-24
          • 2018-07-02
          • 2017-09-23
          • 1970-01-01
          • 2019-01-12
          • 2014-12-16
          • 2021-03-03
          • 1970-01-01
          相关资源
          最近更新 更多