- Вопрос или проблема
- Ответ или решение
- Проблема с изменением физического пути на IIS через appcmd: подробный анализ и рекомендации
- Введение
- Причины проблемы
- Рекомендации
- 1. Использование appcmd и PowerShell
- 2. Остановка и запуск сайта
- 3. Проверка и обновление прав доступа
- 4. Мониторинг состояния системы
- 5. Логирование
- 6. Обновления и патчи
- Заключение
Вопрос или проблема
Мы столкнулись с проблемой на IIS 7.5, где у нас есть простая система развертывания, состоящая из следующего:
Создайте zip-файл нового веб-корня, состоящий из трех папок:
Api
Site
Manager
Это распаковывается в новую папку (назовем ее “SITE_REV1”) и содержит скрипт, который вызывает следующее (по одному для каждого веб-корня):
C:\Windows\system32\inetsrv\appcmd set vdir "www.site.com/" -physicalPath:"SITE_REV1\Site"
Обычно это срабатывает, в 9 из 10 случаев. В некоторых случаях веб-корень, похоже, обновляется корректно (если я проверяю основные настройки в IIS Manager, путь выглядит правильно), но работающий сайт на самом деле указывает на старое местоположение. Единственный способ, которым мы смогли “исправить это”, – это выполнить сброс IIS. Недостаточно просто перезапустить пул приложений.
Иногда, кажется, даже необходимо перезагрузить сервер, но я не на 100% уверен, что это точно так (не всегда я сам решал эту проблему).
Я переписал скрипт, используя Powershell и модуль Web-Administration, надеясь, что в appcmd была ошибка, но возникает та же проблема.
Set-ItemProperty "IIS:\Sites\www.site.com" -Name physicalPath -Value "SITE_REV1\Site"
Кто-нибудь сталкивался с чем-то подобным? У кого-нибудь есть представление о том, что происходит, и что я могу попробовать сделать, чтобы предотвратить эту проблему? Выполнение сброса IIS не является хорошим вариантом для нас, поскольку это повлияет на все сайты на сервере каждый раз, когда мы пытаемся развернуть изменения на одном сайте.
ПРАВКА: Мы выяснили, что запуск/остановка сайта (НЕ пула приложений) в IIS Manager устраняет ошибочное физическое расположение, но если я останавливаю сайт с помощью appcmd, меняю физический путь и затем запускаю его, я все равно сталкиваюсь с той же проблемой. Я в полном замешательстве…
Работает ли изменение физического пути из IIS Manager корректно и сразу?
Вам стоит попробовать следующую команду. Другая синтаксис, должен дать тот же результат, но, возможно, он работает немного иначе внутренне, что приводит к тому, что IIS лучше воспринимает изменения:
C:\Windows\System32\inetsrv\appcmd.exe set app "www.site.com/" -[path="https://serverfault.com/"].physicalPath:"SITE_REV1\Site"
Перезапуск пула приложений должен быть достаточен для каждого сайта. Это независимые процессы. Слишком часто статьи и процессы рекламируют использование iisreset. Является ли остановка/запуск пула приложений для одного сайта вариантом? Это решение для одного сервера и вы пытаетесь минимизировать время простоя для сайта? Существует опция отключения перезапуска при изменении конфигурации. Тогда вы можете перезапускать вручную. Когда возникает проблема, что указано в applicationHost.config?
Ответ или решение
Проблема с изменением физического пути на IIS через appcmd: подробный анализ и рекомендации
Введение
При работе с IIS 7.5 существует ряд нюансов, касающихся изменения физического пути веб-сайтов. Один из таких нюансов обозначился в вашем вопросе. Вы столкнулись с тем, что, в некоторых случаях, изменения, вносимые через инструмент командной строки appcmd
, не вступают в силу немедленно, и сервер продолжает обращаться к старому местоположению, даже если настройки в IIS Manager выглядят корректными.
Причины проблемы
Некоторые возможные причины данного поведения:
-
Кэширование: IIS может кэшировать информацию о сайте и его конфигурации. Изменения, внесенные через
appcmd
, могут не отражаться в работающем экземпляре приложения сразу. -
Состояние приложения: После изменения физического пути, если старые экземпляры приложения все еще запущены, они могут продолжать использовать старые данные. Для корректного перехода необходимо остановить приложение, чтобы освободить ресурсы.
-
Конфигурация Application Pool: Возможно, вы изменяете физический путь, не останавливая сначала сайт. Это может мешать корректному обновлению пути, поскольку приложение может все еще работать с элементами, загруженными до изменения.
-
Проблемы с разрешениями: Убедитесь, что учетная запись приложения имеет необходимые права для доступа к новому физическому пути.
-
Логи и конфигурация: Когда проблема возникает, необходимо проверить журнал событий Windows и конфигурацию
applicationHost.config
на наличие ошибок или нестандартных записей.
Рекомендации
1. Использование appcmd
и PowerShell
Попробуйте изменить физический путь, используя разные командные структуры, чтобы удостовериться, что вы изменяете нужный объект:
C:\Windows\system32\inetsrv\appcmd set app "www.site.com/" -[physicalPath="SITE_REV1\Site"]
2. Остановка и запуск сайта
Попробуйте выполнить полную процедуру останавливать и запускать сайт через appcmd
, а не просто перезапускать пул приложений:
C:\Windows\system32\inetsrv\appcmd stop site "www.site.com"
C:\Windows\system32\inetsrv\appcmd set vdir "www.site.com/" -physicalPath:"SITE_REV1\Site"
C:\Windows\system32\inetsrv\appcmd start site "www.site.com"
3. Проверка и обновление прав доступа
Убедитесь, что у IIS и соответствующего пуле приложений есть права на чтение и выполнение в новой директории.
4. Мониторинг состояния системы
Используйте средства мониторинга, чтобы отслеживать, как изменения отражаются на работе сайта. Это поможет выявить, когда именно происходит "залипание" старых ссылок.
5. Логирование
Включите более детальное логирование в IIS для выявления возможных проблем с конфигурацией, которые могут мешать корректному обновлению.
6. Обновления и патчи
Убедитесь, что ваша версия IIS обновлена до последней стабильной версии, так как возможно, что проблемы с appcmd
были исправлены в более свежих релизах.
Заключение
Сохраняя терпение и применяя системный подход к диагностике проблемы, вы сможете минимизировать возможные даунтаймы, связанные с изменением физического пути веб-сайтов в IIS. Разработка более надежной стратегии развертывания и использование инструментов для автоматизации процессов может привести к значительному улучшению ситуации.