Назад | Перейти на главную страницу

IIS сообщает об ошибке «404 Not Found» для папок, созданных в WSL Bash

После последнего обновления Win10 update (1803) IIS начал сообщать об ошибке «404 Not Found» для папок, созданных в WSL Bash (подсистема Windows для Linux).

Настройки безопасности папок (в проводнике Windows) выглядят нормально. Я даже пытался выполнить «Заменить все права доступа дочерних объектов» к папке, но это не помогло.

Папка хранится в разделе Windows и доступна в WLS как /mnt/c/inetpub/wwwroot/.

Пул приложений IIS работает под AppPoolIdentity (изменение на моего пользователя не помогло).

Кто-нибудь знает, что происходит? Как это исправить?

P.S. Я использую сценарий bash для создания своего веб-сайта.

редактировать

После включения «Просмотр каталога» я обнаружил, что IIS действительно перечисляет файлы, содержащиеся в каталоге. Это означает, что он может получить к нему доступ. Однако по какой-то причине он не может обслуживать их (файлы).

Эта проблема была вызвана изменением, внесенным в сборку Win 17110, которое сделало все новые каталоги, созданные в Bash, чувствительными к регистру (для флага чувствительности к регистру NTFS установлено значение enabled).

Если флаг установлен для каталога, можно проверить через CMD:

fsutil file queryCaseSensitiveInfo C:\interpub\wwwroot\xyz

По какой-то причине у IIS 10.0 возникают проблемы с доступом к каталогу, если этот флаг установлен в enabled.

Проблема может быть решена путем настройки WSL, чтобы этот флаг не устанавливался на enabled по умолчанию. Это можно сделать, отредактировав /etc/wsl.conf и добавление case=false в список опций:

[automount]
options="case=off"

Эта проблема была вызвана изменением, внесенным в сборку Win 17110, которое сделало все новые каталоги, созданные в Bash, чувствительными к регистру (для NTFS установлен флаг чувствительности к регистру). - колено

Убедитесь, что чувствительность к регистру отключена:

В cmd.exe или PowerShell:

fsutil.exe file queryCaseSensitiveInfo .
fsutil.exe file setCaseSensitiveInfo . disable

В bash.exe:

cd /
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o rw,noatime,uid=1000,gid=1000,umask=22,fmask=11,metadata,case=off

Примечание. Не нужно связывать такие каталоги: ln -s SomeDir somedir

/ets/wsl.conf:

[automount]
enabled = true
options = "case=off,metadata,umask=22,fmask=11"
mountFsTab = false

Ссылки: