`

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 服务器限制 IP 访问是指通过配置 Nginx 或 Apache 服务器,屏蔽或限制特定的 IP 地址访问服务器,以防止垃圾评论、攻击或恶意访问。 Nginx 环境下的 IP 限制 在 Nginx 环境下,可以创建一个名为 denyip.conf...

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

    10. 其他安全措施:除了通过Nginx直接限制IP访问之外,还可以通过设置防火墙规则、使用Web应用防火墙(WAF)以及部署入侵检测系统(IDS)等手段来进一步增强安全性。 通过上述知识点的详细说明,可以对Nginx服务器...

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

    下面将详细介绍在Nginx中设置禁止直接用IP访问Web服务器的方法,以及如何进行SEO优化。 首先,我们了解为什么需要禁止通过IP地址访问网站。直接通过IP地址访问网站可能会带来以下几个问题: 1. 安全风险:通过IP...

    nginx https 配置

    在IT行业中,Nginx是一款广泛应用的高性能HTTP服务器和反向代理服务器,它以其轻量级、高并发处理能力而闻名。"nginx https 配置"这个主题涉及到的是如何在Nginx上设置HTTPS服务,以实现网站的安全访问。HTTPS是HTTP...

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

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

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

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

    nginx 限制ip、并发量、连接数等配置

    在Nginx配置文件(通常是`/etc/nginx/nginx.conf`或`/usr/local/nginx/conf/nginx.conf`)中,可以使用`allow`和`deny`指令来允许或禁止特定IP或IP段的访问。以下是一个示例: ```nginx server { listen 80; ...

    Nginx 禁止IP访问 只允许域名访问

    总结来说,Nginx作为高性能的HTTP和反向代理服务器,通过精心配置server块的listen指令和server_name指令以及使用rewrite规则,可以实现对IP访问的限制,并指定特定域名的访问规则,包括禁止访问、返回错误信息或...

    nginx跨域问题,解决多端口,多ip问题

    跨域问题是指在不同的域名、端口或协议下,无法访问服务器资源的问题。解决跨域问题是 Nginx 服务器管理的关键所在。 一、前后端分离跨域问题 前后端分离跨域问题是指在前端和后端分离的情况下,前端无法访问后端...

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

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

    实战Nginx取代Apache的高性能Web服务器.rar

    4. **URL重写与访问控制**:介绍使用Nginx进行URL重写以优化SEO,以及通过限速、IP黑白名单等方式实现访问控制。 5. **日志管理与性能监控**:讲解如何配置Nginx的日志格式,以及如何利用这些日志进行性能分析和...

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

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

    web服务器集群负载均衡Nginx

    2. HTTP缓存:Nginx可以作为一个缓存服务器,将频繁访问的资源存储在内存中,减少对后端服务器的压力。 3. 反向代理:通过配置Nginx,可以将来自客户端的请求转发给多台后端服务器,实现负载均衡,提高服务的可用性...

    Nginx1.22.0版本Linux已编译可直接使用

    然而,这个“Nginx1.22.0 版本 Linux 已编译可直接使用”的压缩包提供了预编译的二进制文件,简化了部署过程,使得用户可以直接在 Linux 系统上运行,无需经历复杂的编译步骤。 Nginx 的主要功能包括: 1. **Web ...

    nginx高性能web服务器.pdf

    另外,还可以通过配置限制IP访问、防止DDoS攻击等方式增强服务器的安全性。 最后,Nginx还支持FastCGI接口,与PHP、Python、Ruby等动态语言配合,处理动态内容。通过FastCGI进程管理模块,Nginx可以有效地管理...

    Nginx高性能Web服务器详解(完整版)pdf下载

    Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...

    nginx+ftp图片上传服务器和访问.rar

    上传的图片将存储在对应用户的`/home/username/images`目录下,并可通过Nginx服务器对外提供访问。 注意:为了确保安全,建议限制FTP用户的写入权限仅限于自己的图片目录,并且禁用匿名FTP访问。同时,保持服务器...

    nginx配置tcp转发(nginx通过白名单访问)

    # 允许192.168.1.0/24子网内的IP访问 deny all; # 拒绝其他所有IP proxy_pass 192.168.1.100:80; ... } } ``` 完成配置后,记得重启Nginx服务使配置生效: ```bash sudo systemctl restart nginx ``` 在...

    nginx服务器

    4. **静态文件处理**:Nginx对于静态文件的处理非常高效,可以直接返回给客户端,减轻后端应用服务器的压力。 5. **缓存功能**:Nginx可以作为HTTP缓存服务器,将经常访问的静态资源存储在内存中,提高响应速度,...

Global site tag (gtag.js) - Google Analytics