Nginx 配置限制访问指定域名
介绍
使用教程
记录几种方式,禁止指定来源网站的链接访问:
- 对于来路为
*.xxxx.com
,全部返回 404
if ($http_referer ~* .*.xxxx.com){
return 404;
}
- 对于来路为
xxxx.com
的链接来路,通过路径转发全部返回到其首页
if ($http_referer ~* xxxx.com) {
rewrite ^/ http://xxxx.com/;
}
- 在
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 访问只允许特定域名访问
- 在配置中添加新的 server
# 禁止ip访问
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
return 403;
}
注意,在所有的 server 前面添加一个新的 server,如图所示
- 修改 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
- 重启服务
nginx -s reload
- 结果
输入 ip 无法访问,输入域名则可以正常访问
如何限制访问某些 URL
- 使用 location 指令进行限制
可以使用 location 指令在 Nginx 的配置文件中指定某个 URL 的访问权限,例如:
location /restricted {
deny all;
}
上述指令会禁止所有用户访问/restricted 路径下的所有内容
- 使用 if 指令进行限制
如果需要更复杂的限制条件,可以使用 if 指令来进行限制。例如:
if ($request_uri ~* "/restricted") {
return 403;
}
上述指令会禁止所有用户访问含有 “/restricted” 字符串的 URL,并返回 403 状态码
- 使用 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 指令时,需要注意它们的位置和先后顺序
- 屏蔽某个 url 和指定参数访问
有个地址总是被人恶意访问,可以配置 nginx 屏蔽这个请求
域名 /chatIndex?kefu_id=l5702123&ent_id=324
location ~ / {
if ( $query_string ~* ^(.*)?kefu_id=l5702123&ent_id=324 ){
return 403;
}
}