浏览 3.9k
今天晚上听陶辉老师的课,问了一个问题,可能是我没有描述清楚,陶辉老师让我看看有关域名匹配的
的文章。但我的问题不是域名匹配
我的问题是:
我有一个域名a.xxx.yy 在配置时root指定在/home/data下,另一个域名b.xxx.yy在配置时root指定在/home/data/news下,遇到的问题是:/home/data/news/2.html,本意是这个文件只能通过b.xxx.yy/2.html访问,但现在发现通过a.xxx.yy/news/2.html也能访问到这个文件,如何实现在不动目录层次关系的情况下,实现2.html文件只能通过b.xxx.yy/2.html,而不能通过a.xxx.yy/news/2.html进行访问,也就是对有父子关系的目录进行隔离。

按点赞数排序
按时间排序
你好环山绕水,抱歉昨天直播时没看清你的问题,现在明白了,你可以对子目录做精确匹配后,用403拒绝:
比如下面这样就可以:
server{
server_name www.xxx.com;
root /home/data;
location /news {
return 403;
}
}
这样,所有news子目录下的文件都会拒绝。当location比较复杂的时候,你必须考虑匹配的优先级,因为url前缀匹配优先级较低,如果有正则表达式能够命中2.html的话,你还要调整相应的正则location,如果有这种情况,你可以参考下这篇文章:https://www.nginx-cn.net/article/69
5
回答于2020-06-05 08:38
你应该有一个默认的服务器来捕捉所有的,你可以返回404或更好地不响应(会节省一些带宽),通过返回444它是nginx特定的HTTP响应,只需关闭连接并返回任何内容
nginx upstream支持域名有几个方式可以考虑:
1.通过resolver指定DNS服务器,proxy_pass到对应域名或相关变量;
2.通过map映射方式指定访问的IP。
微信公众号
加入微信群