![nginx:使用 $http_host 作为服务器根目录安全吗?](https://linux22.com/image/749572/nginx%EF%BC%9A%E4%BD%BF%E7%94%A8%20%24http_host%20%E4%BD%9C%E4%B8%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%A0%B9%E7%9B%AE%E5%BD%95%E5%AE%89%E5%85%A8%E5%90%97%EF%BC%9F.png)
我想用我的 nginx 服务器提供任意域名服务。
这点配置似乎工作得很好:
location / {
root /www/$http_host;
index index.html index.htm;
}
例如,处理 的请求时,www.mydomain.com
会查找 中的文件/www/www.mydomain.com/
。它起作用了,看起来很完美。
但是我不确定这是否安全。这是否会导致任何类型的目录遍历或其他安全问题?nginx 对 $http_host 进行了哪些验证?
答案1
正如乔丹未经验证可能会导致客户端逃离/www
目录并访问任何文件。
幸运的是主机名是已验证(参见源代码) 并且使用两个连续的点..
或路径分隔符等技巧/
将不起作用:nginx将返回400 Bad Header
。验证可能更严格,并且只允许有效的 DNS 标签,但这是个人品味。
然而,在这样的配置下,您不能在/www
目录中放置任何私有内容,因此我宁愿使用:
root /www/$http_host/html