运维 | Nginx 配置限制访问指定域名

Appleex
Appleex
发布于 2023-09-13 / 56 阅读
1
0

运维 | Nginx 配置限制访问指定域名

Nginx 配置限制访问指定域名

介绍

使用教程

记录几种方式,禁止指定来源网站的链接访问:

  1. 对于来路为 *.xxxx.com,全部返回 404
if ($http_referer ~* .*.xxxx.com){
    return 404;
}
  1. 对于来路为 xxxx.com 的链接来路,通过路径转发全部返回到其首页
if ($http_referer ~* xxxx.com) {
    rewrite ^/ http://xxxx.com/;
}
  1. nginx.conf 文件中增加下面的 server{} 块配置,注意:不是在原有的 80 端口的 server{} 块中修改配置!

比较暴力:

server {
    listen       80 default_server;
    server_name  _;
    return       403;
}

比较友好:

server {
        listen       80 default_server;
        server_name  _;
        rewrite ^(.*) http://www.xxx.com/$1 permanent;
}

FAQ

如何限制 IP 访问只允许特定域名访问

  1. 在配置中添加新的 server
# 禁止ip访问
server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    return 403;
}

注意,在所有的 server 前面添加一个新的 server,如图所示

  1. 修改 server 配置中 localhost 为指定域名
server {
    listen       80;
    server_name  xxx.com;
 
    location / {
        root   html;
        index  index.html index.htm;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

注意,默认配置 server_name 值为 localhost

  1. 重启服务
nginx -s reload
  1. 结果

输入 ip 无法访问,输入域名则可以正常访问

如何限制访问某些 URL

  1. 使用 location 指令进行限制

可以使用 location 指令在 Nginx 的配置文件中指定某个 URL 的访问权限,例如:

location /restricted {
    deny all;
}

上述指令会禁止所有用户访问/restricted 路径下的所有内容

  1. 使用 if 指令进行限制

如果需要更复杂的限制条件,可以使用 if 指令来进行限制。例如:

if ($request_uri ~* "/restricted") {
    return 403;
}

上述指令会禁止所有用户访问含有 “/restricted” 字符串的 URL,并返回 403 状态码

  1. 使用 HTTP Auth Basic 进行限制

以在 Nginx 中使用 HTTP Auth Basic 进行限制,这样只有经过验证的用户才能访问被限制的 URL。例如:

location /restricted {
    auth_basic "Restricted access";
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
}

上述指令会要求用户输入用户名和密码才能访问/restricted 路径下的内容。用户信息保存在/etc/nginx/conf.d/.htpasswd 文件中。

需要注意的是,Nginx 的配置文件中的 location 和 if 指令都是按照顺序执行的。因此,在使用多个 location 和 if 指令时,需要注意它们的位置和先后顺序

  1. 屏蔽某个 url 和指定参数访问

有个地址总是被人恶意访问,可以配置 nginx 屏蔽这个请求

域名 /chatIndex?kefu_id=l5702123&ent_id=324

location ~ / {
	if ( $query_string ~* ^(.*)?kefu_id=l5702123&ent_id=324 ){
		return 403;
	   }
}

参考文献


评论