Некоторое время назад меня встретил клиент, который хотел запустить свой собственный сервер WebDAV (используя www.sabredav.org ) на веб-сайтах Windows Azure . После некоторого тестирования казалось, что этому серверу WebDAV на базе PHP не хватает какой-либо конфигурации на уровне веб-сервера. Некоторые ключевые слова HTTP, необходимые для протокола WebDAV, не были сопоставлены с исполняющей средой PHP, что делало практически невозможным выполнение пользовательской реализации WebDAV на PHP. Если нет какой-либо конфигурации возможно …
Я выпустил простой phpinfo (); на веб-сайтах Windows Azure , просто выводя конфигурацию PHP и все доступные переменные среды на веб-сайтах Windows Azure. Это выявило следующую интересную переменную среды:
Ага! Это интересный! Это в основном конфигурация веб-сервера IIS, который вы используете. Он содержит информацию о том, какие разделы конфигурации могут быть переопределены с помощью вашего собственного файла Web.config, а какие нет. Я прочитал файл (кажется, у вас есть доступ к этому пути) и разместил его вывод здесь: applicationhost.config (70.04 кб) . Также есть файл с именем rootweb.config : rootweb.config (36,66 кб)
Перезаписываемые параметры конфигурации
Для простых людей, не заинтересованных в чтении всего applicationhost.config и rootweb.config, вот что вы можете переопределить в своем собственном Web.config. Небольшой отказ от ответственности: это детали реализации и могут быть изменены. Я не Microsoft, поэтому я не могу предсказать, будет ли все это продолжать работать. Используйте свой здравый смысл.
Параметр конфигурации | Может быть переопределено в Web.config? |
system.webServer.caching | да |
system.webServer.defaultDocument | да |
system.webServer.directoryBrowse | да |
system.webServer.httpErrors | да |
system.webServer.httpProtocol | да |
system.webServer.httpRedirect | да |
system.webServer.security.authorization | да |
system.webServer.security.requestFiltering | да |
system.webServer.staticContent | да |
system.webServer.tracing.traceFailedRequests | да |
system.webServer.urlCompression | да |
system.webServer.validation | да |
system.webServer.rewrite.rules | да |
system.webServer.rewrite.outboundRules | да |
system.webServer.rewrite.providers | да |
system.webServer.rewrite.rewriteMaps | да |
system.webServer.externalCache.diskCache | да |
system.webServer.handlers | Да, но некоторые заблокированы |
system.webServer.modules | Да, но некоторые заблокированы |
Все остальные, вероятно, не представляется возможным.
Проект Куду
В приложенииhost.config есть несколько интересных вещей (70.04 кб) . Конечно, вы сами решаете, что интересно, так что читайте сами. Вот что мне показалось интересным: проект Kudu там! Проект Куду? Да, механизм с открытым исходным кодом, стоящий за веб-сайтами Windows Azure (что подразумевает, что вы фактически можете разместить свою собственную службу, подобную веб-сайтам Windows Azure).
Если вы посмотрите на архитектурные детали , вот интересное утверждение:
Сайт Kudu работает в той же песочнице, что и реальный сайт. Это имеет некоторые важные последствия.
Во-первых, сайт Kudu не может сделать ничего, что сам сайт не смог бы сделать сам. (…) Но находясь в той же песочнице, что и сайт, он может навредить только самому сайту.
Кроме того, сайт Kudu имеет те же квоты, что и сайт. То есть процессор / оперативная память / диск, используемые службой Kudu, учитываются в квоте сайта. (…)
Подводя итог, можно сказать, что службы Kudu полностью полагаются на модель безопасности среды выполнения веб-сайта Azure, что делает его простым и безопасным.
Доказательство можно найти в applicationhost.config. Если вы посмотрите на определение <sites /> , вы увидите, что два сайта определены. Ваш сайт и сопутствующий сайт с именем ~ 1yoursitename . Первый, конечно, запускает ваш сайт. Последний запускает проект Kudu, который позволяет вам использовать git push и использовать webdeploy.
В файле rootweb.config (36,66 КБ) вы найдете сбалансированную нагрузку веб-сайтов Windows Azure. Здесь определен машинный ключ, который будет одинаковым для всех экземпляров ваших веб-сайтов, что позволит вам делиться состоянием сеанса, формировать файлы cookie аутентификации и т. Д.
Мои PHP HTTP глаголы переопределить
Чтобы исправить отображение глагола PHP HTTP, вот Web.config, который я использовал у клиента, просто удалив и повторно добавив обработчик PHP:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="PHP53_via_FastCGI" /> <add name="PHP53_via_FastCGI" path="*.php" verb="GET, PUT, POST, HEAD, OPTIONS, TRACE, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK" modules="FastCgiModule" scriptProcessor="D:\Program Files (x86)\PHP\v5.3\php-cgi.exe" resourceType="Either" requireAccess="Script" /> </handlers> </system.webServer> </configuration>