Я хотел бы обслуживать произвольные доменные имена на моем сервере nginx.
Эта конфигурация работает нормально:
location / {
root /www/$http_host;
index index.html index.htm;
}
Например, обслуживая запрос на www.mydomain.com
будет искать файл в /www/www.mydomain.com/
. Это работает, выглядит идеально.
Однако я не уверен, что это было бы безопасно. Допустит ли это какой-либо обход каталога или возникнет другая проблема безопасности? Какая проверка выполняется на $ http_host с помощью nginx?
Как заметил Иордания непроверенный может привести к побегу клиента из /www
каталог и доступ к любому файлу.
К счастью, имена хостов являются подтверждено (см. исходный код) и уловки вроде использования двух последовательных точек ..
или разделитель пути /
не сработает: nginx вернется 400 Bad Header
. Проверка может быть более строгой и разрешать только действительные метки DNS, но это личный вкус.
Тем не менее, с такой конфигурацией нельзя ничего личного в /www
каталог, поэтому я бы предпочел использовать:
root /www/$http_host/html