Nginx 如何通过ip地址禁用对网站的直接访问
我在VPS上有一个网站 我遇到的问题是,当我输入服务器的IP时,它会链接到网站。Nginx 如何通过ip地址禁用对网站的直接访问,nginx,dns,ip,server,cloudflare,Nginx,Dns,Ip,Server,Cloudflare,我在VPS上有一个网站 我遇到的问题是,当我输入服务器的IP时,它会链接到网站。 即使进入mail.domain.com,它也会做同样的事情 如何禁用该功能,以便访问者能够收到消息或被定向到域 我尝试禁用IP并在CloudFlare上发送记录,但没有成功 我的设置是: VPS on Linux Debian Nginx no control panel just command line Cloudflare DNS setup with BIND 您可以尝试在以下位置设置服务器IP地址:
即使进入mail.domain.com,它也会做同样的事情 如何禁用该功能,以便访问者能够收到消息或被定向到域 我尝试禁用IP并在CloudFlare上发送记录,但没有成功 我的设置是:
VPS on Linux Debian
Nginx
no control panel just command line
Cloudflare
DNS setup with BIND
您可以尝试在以下位置设置服务器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
每个vhost都应该有自己的*.conf文件(为了更好地组织),如:
您可以使用重定向、nginx配置:
server {
listen 80;
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
server {
listen 80;`enter code here`
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
您只需在其他指令之前添加一个服务器指令
server {
listen 80;
server_name _;
return 404;
}
您需要指定default\u server
参数,以便所有不可用的服务器请求都转到该服务器块
,该块抛出444错误
444:连接已关闭,无响应
参考:您可以返回任何您认为合适的错误。可以在此处找到错误列表
您可以使用重定向、nginx配置:
server {
listen 80;
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
server {
listen 80;`enter code here`
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
把它放在
/etc/nginx/conf.d/SERVER\u IP\u ADDRESS.conf
文件的顶部,并注释下面的所有内容
#disabling accesing server by ip address
server {
listen SERVER_IP_ADDRESS:80 default;
server_name _;
return 404;
}
然后重新启动Nginx服务器(在Ubuntu上通过服务Nginx restart
此命令完成)
现在,当您将服务器的ip地址放入浏览器url字段时,将出现404错误。如果它是apache服务器,您可以使用.htaccess。修复了一些语法和格式问题。这里要解决的具体问题是,必须显式定义ip地址,并使用403或类似的代码重定向或阻止ip地址。我在配置中删除了对我的IP地址的所有引用,但它仍然显示在IP中——这让我发疯。但它似乎又回到了允许IP访问,如果不被覆盖的话。谢谢这也只适用于我,当listen指令也有确切的IP时,否则nginx匹配一个更具体的服务器块,尽管服务器名称不匹配。如何根据访问者执行
返回301
:如果是本地的,nginx应该重定向到192.168..,如果是远程的,然后domain.com.将其放入/etc/nginx/conf.d/default.conf
谢谢,这对我很有用,但我的应用程序仍然可以使用IP\u地址访问:
。我如何解决这个问题?是否会自动读取所有*.conf
文件?或者我需要将它们包含在某个地方吗?@luckyndonald nginx.conf会自动将conf.d目录下的所有文件包含在include/etc/nginx/conf.d/*.conf中代码>你应该解释一下444
的意思。我以前没见过那个。关于https
?@mahfuz对于https,您可以添加listen443ssl;对于https,您需要创建自签名证书。在没有证书的情况下,不可能对https请求进行444响应。如果其他服务器块中的一个具有默认\u服务器
,这是否可行?\u
是否有特殊含义?From:在catch all server示例中,可以看到奇怪的名称“\u:…这个名称没有什么特殊之处,它只是无数无效域名中的一个,这些域名从不与任何真实名称相交。其他无效的名称,如“-”和“!@#”也可以同样使用。@mpen如果另一个设置default\u服务器
,它将不起作用<代码>\uu没有特殊意义,您可以使用任何东西。欢迎使用堆栈溢出!请注意,虽然代码片段本身可能是一个有用的答案,但最好给未来的读者留下一些注释,说明为什么这可以解决问题。谢谢这个解决方案的问题是,您需要预先知道服务器的IP地址。新事物(比如在分布式体系结构上运行)经常会将您的nginx移动到不同的IP。
server {
listen 80;`enter code here`
server_name IP_ADDRESS;
return 301 http://YOUR.DOMAIN;
}
#disabling accesing server by ip address
server {
listen SERVER_IP_ADDRESS:80 default;
server_name _;
return 404;
}