`

Nginx中如何防止用IP直接访问服务器

 
阅读更多

之前也有段时间接触过Nginx,主要是自己拿来学习研究用,记得当时还写过两篇入门级的文章如何在windows上配置并运行nginx -- 安装篇如何在windows上配置并运行nginx -- 配置实例篇 ,呵呵,比较入门,别见怪了。今天在详细看Nginx配置的时候,突然想到一个问题:如何在Nginx配置中限定只能用域名访问服务器,而不能IP访问呢?原先我还以为这在Nginx下是不可能的,也就抱着试试看的心态去网上找了一番,结果出乎我的意料,答案是完全可以的,又一次证明我的直觉是错误的,以下是关于Nginx防止IP直接访问的方法的原文,先贴出来,希望给遇到此问题的朋友一个满意的答案。

看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面。

官方文档中提供的方法:

If you do not want to process requests with undefined “Host” header lines, you may define a default server that just drops the requests:

1
2
3
4
5
server {
listen 80 default_server;
server_name _;
return 444;
}
说白了就是只要是ip访问的直接重置444错误。

但是这样好像又不太友好,如果能直接给跳转到该web server的网址就好了。

配置如下:

1
2
3
4
5
server {
listen 80 default_server;
server_name _;
rewrite ^ http: //www .domain.com$request_uri?;
}
这样还是有一点问题,某些特别的地址,我需要用ip访问,其他的都禁止,如何配置呢?

比如说我想让监控宝直接用ip访问我的机器的nginx状态信息,其他的用ip访问的所有请求都跳转到域名上。

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80 default_server;
server_name _;
         location /xxxxx {
             stub_status on;
             access_log  off;
         }
         location /{
             rewrite ^ http: //www .nginxs.com$request_uri?;
         }
}
这样就实现了我们想要的功能了。

另外,在这里说一下server_name。

server_name 是可以使用正则表达式的,这个功能因该说相当实用。

Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为:

1、准确的server_name匹配,例如:

1
2
3
4
5
server {
      listen       80;
      server_name  domain.com  www.domain.com;
      ...
}
2、以*通配符开始的字符串:
1
2
3
4
5
server {
      listen       80;
      server_name  *.domain.com;
      ...
}
3、以*通配符结束的字符串:
1
2
3
4
5
server {
      listen       80;
      server_name  www.*;
      ...
}
4、匹配正则表达式:
1
2
3
4
5
server {
      listen       80;
      server_name  ~^(?.+)\.domain\.com$;
      ...
}
nginx将按照1,2,3,4的顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定要分清楚它的匹配顺序(类似于location指令)。
server_name指令一项很实用的功能便是可以在使用正则表达式的捕获功能,这样可以尽量精简配置文件,毕竟太长的配置文件日常维护也很不方便。下面是2个具体的应用:
1、在一个server块中配置多个站点:
1
2
3
4
5
6
7
server
    {
      listen       80;
      server_name  ~^(www\.)?(.+)$;
      index index.php index.html;
      root  /data/wwwsite/ $2;
    }
站点的主目录应该类似于这样的结构:
1
2
3
4
/data/wwwsite/domain .com
/data/wwwsite/nginx .org
/data/wwwsite/baidu .com
/data/wwwsite/google .com
这样就可以只使用一个server块来完成多个站点的配置。

2、在一个server块中为一个站点配置多个二级域名。

实际网站目录结构中我们通常会为站点的二级域名独立创建一个目录,同样我们可以使用正则的捕获来实现在一个server块中配置多个二级域名:

1
2
3
4
5
6
7
8
9
10
server
    {
      listen       80;
      server_name  ~^(.+)?\.domain\.com$;
      index index.html;
      if ($host = domain.com){
          rewrite ^ http: //www .domain.com permanent;
      }
      root  /data/wwwsite/domain .com/$1/;
    }
站点的目录结构应该如下:
1
2
3
/data/wwwsite/domain .com /www/
/data/wwwsite/domain
.com /nginx/
这样访问www.domain.com时root目录为/data/wwwsite/domain.com/www/,nginx.domain.com时为/data/wwwsite/domain.com/nginx/,以此类推。

后面if语句的作用是将domain.com的方位重定向到www.domain.com,这样既解决了网站的主目录访问,又可以增加seo中对www.domain.com的域名权重。

分享到:
评论

相关推荐

    linux服务器(nginx或者apache)限制IP访问.docx

    linux服务器(nginx或者apache)限制IP访问.docx

    docker下载nginx镜像并配置,然后通过公网ip访问

    一台Liunx服务器(内网可也以) 系统中具有docker环境(如果没有的话,可以查看我的另一篇文章docker的安装https://blog.csdn.net/weixin_42431676/article/details/105291832) 执行命令: docker pull nginx //...

    Nginx服务器作反向代理实现内部局域网的url转发配置

    然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给...

    Nginx防止直接用IP访问Web服务器的设置方法

    官方文档中提供的方法: If you do not want to process ... } 说白了就是只要是访客用ip访问就直接重置444错误。但是这样好像又不太友好,如果能直接给跳转到该web server的网址就好了。配置如下: 代码如下: s

    决战Nginx系统卷:高性能Web服务器详解与运维第二部分(保证能用)

    第30章 后台Nginx服务器记录原始客户端的IP地址 第31章 解决防盗链 第32章 Nginx提供HTTPS服务 第33章 监控Nginx的工作状态 第34章 使用empty_gif 第35章 Nginx对响应体内容的替换 第36章 Nginx的WebDAV 第37...

    Nginx服务器限制IP访问的各种情况全解析

    主要介绍了Nginx服务器限制IP访问的各种情况全解析,包括限制同一IP在一段时间内的访问次数和全局限IP访问以及限制IP访问指定目录等情况,需要的朋友可以参考下

    决战Nginx系统卷:高性能Web服务器详解与运维第一部分(保证能用)

    第30章 后台Nginx服务器记录原始客户端的IP地址 第31章 解决防盗链 第32章 Nginx提供HTTPS服务 第33章 监控Nginx的工作状态 第34章 使用empty_gif 第35章 Nginx对响应体内容的替换 第36章 Nginx的WebDAV 第37...

    Nginx+ftp搭建图片服务器

    使用linux做服务器,在linux中有个ftp组件vsftpd。 二、Nginx服务器搭建 1.安装Nginx 要求安装vmware虚拟机。 Linux:CentOS6.4(32) Nginx:1.8.0 Vsftpd:需要在线安装。 虚拟机以及Linux安装很简单此处略。 Linux...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维第三部分(保证能用)

    第30章 后台Nginx服务器记录原始客户端的IP地址 第31章 解决防盗链 第32章 Nginx提供HTTPS服务 第33章 监控Nginx的工作状态 第34章 使用empty_gif 第35章 Nginx对响应体内容的替换 第36章 Nginx的WebDAV 第37...

    Nginx服务器限制访问速度的配置方法

    用Nginx建站的同学,常会有限速需求。开发测试阶段在本地限速模拟公网的环境,方便调试。投入运营会有限制附件下限速度,限制每个用户的访问速度,限制每个IP的链接速度等需求。 刚遇到一个Bug在网络很卡的情况下...

    Nginx中禁止使用IP访问网站的配置实例

    国内因为备案的原因,所有服务器都要禁止使用IP访问网站。否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了。这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟...

    Web应用安全:Nginx权限配置.pptx

    在Nginx中,可以设定各IP访问服务器的权限,命令格式如下: allow/deny address | CIDR | all 允许访问 禁止访问 Nginx权限配置 3、参数详解 #address,允许访问的客户端IP,不支持同时设置多个。如果有多个IP需要...

    服务器使用Nginx部署Springboot项目的详细教程(jar包)

    1,将java项目打成jar包 这里我用到的是maven工具 这里有两个项目,打包完成后一个为demo.jar,另一个为jst.jar 2.准备工具 1.服务器 ...执行启动完两个jar包后使用ip与端口号访问接口 (注:测试接

    Nginx日志管理介绍

    客户端的ip地址(代理服务器,显示代理服务ip) $remote_user 用于记录远程客户端的用户名称(一般为“-”) $time_local 用于记录访问时间和时区 $request 用于记录请求的url以及请求方法 $status 响应状态码...

    Web应用安全:Nginx权限配置.doc

    实验三:Nginx权限配置 实验目的 熟悉nignx并配置访问权限 ...我们在步骤二中输入的命令是禁止所有ip访问服务器,因此重启过后,Windows访问kali的nginx服务器时显示被禁止。 附:在修改前,可以正常进入网站。

    nginx与apache限制ip并发访问 限制ip连接的设置方法

    nginx nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量 1.添加limit_zone 这个变量只能在http使用 vi /usr/local/nginx/conf/nginx.conf limit_zone one $binary_remote_addr 10m; 2.添加limit_conn 这...

    Nginx服务器实现通过ip和user_gent限制访问的方法分析

    本文实例讲述了Nginx服务器实现通过ip和user_gent限制访问的方法。分享给大家供大家参考,具体如下: DDOS攻击是大规模访问站点经常会遇到的问题,它是指有人通过程序恶意刷站点的某些页面,导致站点响应缓慢或者...

    nginx代理服务器完整配置文件

    已完全配置好了,只要修改自己ip地址,基本就可以使用。Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点

    Python实现获取nginx服务器ip及流量统计信息功能示例

    本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=utf8 log_file = /usr/local/nginx/logs/access.log with open(log_file) as f: ...

Global site tag (gtag.js) - Google Analytics