我想用我的 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